Zadanie 1. Trójkąty i kwadraty

Dana jest dwuwymiarowa tablica dodatnich liczb naturalnych. Tablica składa się z n wierszy, w każdym wierszu podane są trzy liczby naturalne dodatnie. Każda liczba w tablicy reprezentuje pole kwadratu.

Wyznacz długości boków kwadratów z dokładnością do dwóch miejsc po przecinku i sprawdź, czy z boków kolejnych kwadratów w wierszu można zbudować trójkąt. Oblicz, ile trójkątów możesz zbudować.

Napisz algorytm (w postaci pseudokodu lub w wybranym języku programowania) sprawdzania, czy z długości boków kwadratów można zbudować trójkąty.

Przykład 1

Dla liczb:

Linia 1. 17 19 21.

otrzymane pierwiastki kwadratowe to liczby:

Linia 1. 4 przecinek 12 4 przecinek 35 4 przecinek 58.

Z boków tej długości można zbudować trójkąt.

W zapisie algorytmu możesz wykorzystać tylko operacje arytmetyczne (dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie całkowite, reszta z dzielenia), instrukcje porównania, instrukcje sterujące i przypisania do zmiennych, samodzielnie napisane funkcje, wykorzystujące wymienione wyżej operacje lub funkcje wbudowane.

Specyfikacja problemu:

Dane:

  • tablica[0..n - 1][0..2] – tablica liczb naturalnych

  • n – liczba naturalna; liczba wierszy

Wynik:

  • liczbaTrojkatow – liczba naturalna; liczba trójkątów, które można zbudować z odcinków, które są długościami boków kwadratów

Napisz algorytm w postaci pseudokodu lub w wybranym języku programowania. Następnie porównaj go z omówionym tu rozwiązaniem.

Rozwiązanie

Zauważmy, że algorytm bazuje na algorytmie Newtona‑Raphsonametoda Newtona‑RaphsonaNewtona‑Raphsona.

W metodzie tej wykorzystywany jest fakt, że jeśli pierwiastkowana liczba oznacza pole powierzchni kwadratu, to długość jego boku będzie wynikiem pierwiastkowania badanej liczby. Algorytm polega na modyfikowaniu przyjętej długości boków prostokąta o polu równym pierwiastkowanej liczbie do momentu, w którym różnica między ich długościami będzie mniejsza niż zadany próg (zakładamy, że przy różnicy długości boków poniżej tego progu przybliżoną wartością pierwiastka tej liczby jest długość jednego z boków prostokąta).

R1ECNCjtaoDAe
Źródło: Contentplus.pl sp. z o.o., licencja: CC BY-SA 3.0.

Wiemy, na czym polega działanie algorytmu Newtona‑Raphsona. Algorytm ten zapisany za pomocą pseudokodu wygląda następująco:

Linia 1. funkcja oblicz podkreślnik pierwiastek otwórz nawias okrągły a przecinek epsilon zamknij nawias okrągły. Linia 2. b ← a prawy ukośnik 2. Linia 3. c ← a prawy ukośnik b. Linia 5. dopóki kreska pionowa b minus c kreska pionowa zamknij nawias ostrokątny epsilon wykonuj. Linia 6. b ← otwórz nawias okrągły b plus c zamknij nawias okrągły prawy ukośnik 2. Linia 7. c ← a prawy ukośnik b. Linia 9. zwróć b.

Naszym zadaniem jest wyznaczenie wartości pierwiastka w zaokrągleniu do dwóch miejsc po przecinku, z tego względu wykorzystamy również funkcję zaokr().

Zmiennej epsilon przypisujemy wartość 0 , 001.

Ustalając wartość parametru epsilon, należy wziąć pod uwagę dokładność obliczeń komputerowych. Więcej na ten temat znajdziesz w e‑materiale Błędy obliczeń numerycznychP90lYs0bMBłędy obliczeń numerycznych.

Linia 1. funkcja oblicz podkreślnik pierwiastek otwórz nawias okrągły a zamknij nawias okrągły. Linia 2. epsilon ← 0 kropka 001. Linia 3. b ← a prawy ukośnik 2. Linia 4. c ← a prawy ukośnik b. Linia 6. dopóki kreska pionowa b minus c kreska pionowa zamknij nawias ostrokątny epsilon wykonuj. Linia 7. b ← otwórz nawias okrągły b plus c zamknij nawias okrągły prawy ukośnik 2. Linia 8. c ← a prawy ukośnik b. Linia 10. b ← zaokr otwórz nawias okrągły b zamknij nawias okrągły. Linia 11. zwróć b.

Gdy już przygotowaliśmy funkcję obliczającą pierwiastek kwadratowy, przejdźmy do zapisania algorytmu sprawdzania, czy z trzech danych w każdym wierszu można zbudować trójkąt.

Linia 1. funkcja czyTrojkat otwórz nawias okrągły a przecinek b przecinek c zamknij nawias okrągły. Linia 2. jeżeli otwórz nawias okrągły a plus b zamknij nawias ostrokątny c zamknij nawias okrągły ORAZ otwórz nawias okrągły b plus c zamknij nawias ostrokątny a zamknij nawias okrągły ORAZ otwórz nawias okrągły a plus c zamknij nawias ostrokątny b zamknij nawias okrągły. Linia 3. zwróć 1. Linia 4. w przeciwnym razie. Linia 5. zwróć 0.

Zapiszmy również właściwą część programu.

Wczytujemy do programu dwuwymiarową tablicę liczby, tworzymy również pustą dwuwymiarową tablicę wyniki[0..n - 1][0..2].

W pętli dla każdej liczby z tablicy liczby dodajemy nową pustą tablicę do tablicy wyniki, a następnie obliczamy pierwiastki dla każdej liczby i przypisujemy je do kolejnych indeksów w wewnętrznej tablicy wyniki[i].

Tworzymy zmienną licznikTrojkatow; przypisujemy jej wartość 0.

W pętli dla każdej liczby z tablicy liczby przypisujemy wartości pierwiastków z wewnętrznej tablicy wyniki[i] do zmiennych a, b, i c.

Wywołujemy funkcję czyTrojkat(a, b, c) i sprawdzamy, czy zwrócona wartość jest równa 1, co oznacza, że odcinki, których długości są pierwiastkami liczb naturalnych, tworzą trójkąt.

Jeśli wartość zwrócona przez funkcję czyTrojkat(a, b, c) jest równa 1, wartość zmiennej licznikTrojkatow zostanie zwiększona o 1.

Po tym, jak program przeiteruje po wszystkich wierszach tablicy liczby, wypisana zostanie wartość zmiennej licznikTrojkatow.

Linia 1. wczytaj tablicę liczby otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 2. utwórz tablicę wyniki otwórz nawias kwadratowy zamknij nawias kwadratowy otwórz nawias kwadratowy zamknij nawias kwadratowy. Linia 4. dla i od 0 do długość otwórz nawias okrągły liczby zamknij nawias okrągły minus 1 wykonuj dwukropek. Linia 5. dodaj pustą tablicę w tablicy wyniki. Linia 6. dla j od 0 do 2 wykonuj dwukropek. Linia 7. wyniki otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy ← oblicz podkreślnik pierwiastek otwórz nawias okrągły liczby otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy j zamknij nawias kwadratowy zamknij nawias okrągły. Linia 9. licznikTrojkatow ← 0. Linia 11. dla i od 0 do długość otwórz nawias okrągły liczby zamknij nawias okrągły wykonuj dwukropek. Linia 12. a ← wyniki otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy. Linia 13. b ← wyniki otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy. Linia 14. c ← wyniki otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 2 zamknij nawias kwadratowy. Linia 15. jeżeli czyTrojkat otwórz nawias okrągły a przecinek b przecinek c zamknij nawias okrągły znak równości znak równości 1. Linia 16. licznikTrojkatow znak równości plus 1. Linia 18. wypisz licznikTrojkatow.
Praca domowa

Zapisz program, wykorzystując wybrany język programowania.

Słownik

metoda Newtona‑Raphsona
metoda Newtona‑Raphsona

(inaczej: metoda Newtona lub metoda stycznych) algorytm wyznaczania wartości pierwiastka funkcji oparty na wyliczaniu kolejnych przybliżeń coraz bliższych rzeczywistej wartości pierwiastka; metoda ta może być wykorzystywana m.in. do omawianego wyznaczania wartości pierwiastka kwadratowego

metoda numeryczna
metoda numeryczna

metoda rozwiązywania problemów matematycznych za pomocą operacji na liczbach