R12192efrJ5bH
Grafika przedstawia dwa splecione symbole węży. Jeden jest niebieski, a drugi żółty.

Stosowanie funkcji w języku Python do realizacji algorytmu Euklidesa z resztą z dzielenia

Logo języka Python
Źródło: Dnu72, dostępny w internecie: commons.wikimedia.org, licencja: CC BY-SA 4.0.

Algorytm wyznaczania największego wspólnego dzielnika opisany został przez greckiego matematyka Euklidesa. Algorytm ten ma dwie wersje. Pierwsza wykorzystuje odejmowanie i została przedstawiona w e‑materiale Stosowanie funkcji w języku Python do realizacji algorytmu Euklidesa z odejmowaniemP1BvUOkroStosowanie funkcji w języku Python do realizacji algorytmu Euklidesa z odejmowaniem. Druga wersja –  wykorzystująca operacje obliczania reszty z dzielenia – zostanie opisana w tym e‑materiale.

  1. Interaktywna treść merytorycznaInteraktywna treść merytoryczna

  2. MultimediumMultimedium

  3. Zestaw ćwiczeń interaktywnychZestaw ćwiczeń interaktywnych

  4. SłownikSłownik

  5. BibliografiaBibliografia

Aby zrozumieć poruszane w tym materiale zagadnienia, przypomnij sobie:
Twoje cele
  • Przeanalizujesz schemat blokowy algorytmu obliczania NWD z zastosowaniem działania reszty z dzielenia.

  • Napiszesz program obliczający NWD.

  • Zastosujesz napisany program do skracania ułamków zwykłych.

  • Porównasz liczbę operacji wykonywanych w algorytmach Euklidesa wykorzystujących odejmowanie i działanie reszty z dzielenia.

1

NWD

Największy wspólny dzielnik (NWD) dwóch liczb całkowitych ab to największa liczba naturalna d, która jest dzielnikiem każdej z nich, czyli dzieli je bez reszty. Przyjmijmy, że będziemy ją oznaczać jako d = NWD(a, b).

NWD ma wiele zastosowań, m.in. pozwala skracać ułamki zwykłe do postaci nieskracalnej, tzn. takiej, w której licznik i mianownik są liczbami względnie pierwszymi, czyli NWD(a, b) = 1.

Algorytm Euklidesa z zastosowaniem działania reszty z dzielenia

Specyfikacja algorytmu:

Dane wejściowe:

  • a, b – dodatnie liczby naturalne

Wynik:

  • d – dodatnia liczba naturalna, NWD(a, b)

Do rozwiązania postawionego problemu użyjemy algorytmu Euklidesa w wersji z zastosowaniem działania reszty z dzielenia.

Przeanalizujemy schemat blokowy algorytmu.

R1crwcNRkMMEP
Schemat blokowy algorytmu Euklidesa z wykorzystaniem działania reszty z dzielenia
Źródło: Robert Bednarz, licencja: CC BY 3.0.
Przykład 1

Przeanalizujmy wyznaczanie NWD według algorytmu Euklidesa z wykorzystaniem działania reszty z dzielenia (zgodnie ze schematem blokowym umieszczonym powyżej) dla danych: a = 76, b = 12.

Powtórzenia

a

b

działanie

1

76

16

r = 76 mod 16 = 12
a = 16
b = 12

2

16

12

r = 16 mod 12 = 4
a = 12
b = 4

3

12

4

r = 12 mod 4 = 0
a = 4
b = 0

0

Wynik: NWD(76, 16) = 4

Liczba powtórzeń: 3

Przykład pokazuje, że dopóki b > 0, powtarzamy wykonywanie następującego zestawu instrukcji: wyliczamy resztę z dzielenia a mod b, do a przypisujemy b, natomiast do b przypisujemy wyliczoną resztę. Kiedy b, czyli ostatnia obliczona reszta, wyniesie 0, algorytm kończy działanie, a wynikiem jest wartość a, czyli wartość przedostatniej wyliczonej reszty.

Najważniejszą częścią algorytmu jest pętla, która wykonuje się, dopóki warunek b > 0 jest prawdziwy. Wewnątrz pętli obliczamy resztę z dzielenia liczb r = a mod b i wykonujemy przypisania: a = b, b = r. Po zakończeniu pętli wypisujemy wynik, tj. wartość a.

Zapis algorytmu w postaci programu

Napiszemy program, który będzie obliczał NWD, wykorzystując omówiony algorytm.

Do pisania programu możesz użyć dostępnego w swoim środowisku edytora, np. IDLE dołączonego do standardowej instalacji języka Python.

Przykład 2

Zacznijmy od kodu, w którym za pomocą komentarzy oznaczymy kolejne kroki algorytmu:

Linia 1. kratka pobierz liczbę całkowitą a. Linia 4. kratka pobierz liczbę całkowitą b. Linia 7. kratka pętla obliczająca NWD. Linia 10. kratka wypisanie wyniku. Linia 11. print otwórz nawias okrągły cudzysłów NWD otwórz nawias okrągły a przecinek b zamknij nawias okrągły znak równości cudzysłów przecinek a zamknij nawias okrągły.

Dane

Jak wynika z komentarzy w kodzie programu, na początku musimy pobrać dane, czyli dwie liczby naturalne większe od zera.

1
Polecenie 1

Dodaj do kodu poniżej odpowiednich komentarzy instrukcje pobierające z klawiatury dwie liczby naturalne i zapamiętujące je w zmiennych ab. Użyj funkcji input()int().

Kod z uzupełnionymi instrukcjami pobierania od użytkownika danych:

Linia 1. kratka pobierz liczbę całkowitą a. Linia 2. a znak równości int otwórz nawias okrągły input otwórz nawias okrągły cudzysłów Podaj liczbę a dwukropek cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 4. kratka pobierz liczbę całkowitą b. Linia 5. b znak równości int otwórz nawias okrągły input otwórz nawias okrągły cudzysłów Podaj liczbę b dwukropek cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 7. kratka pętla obliczająca NWD. Linia 10. kratka wypisanie wyniku. Linia 11. print otwórz nawias okrągły cudzysłów NWD otwórz nawias okrągły a przecinek b zamknij nawias okrągły znak równości cudzysłów przecinek a zamknij nawias okrągły.

Pętla

Naszym zadaniem jest teraz zapisanie w programie pętli obliczającej NWD. Ponieważ nie wiemy, ile razy trzeba wykonać instrukcje wewnętrzne pętli, aby uzyskać wynik, użyjemy instrukcji while. Pętla będzie działać, dopóki warunek b > 0 będzie prawdziwy. Wewnątrz pętli umieścimy trzy instrukcje przypisania. Pierwsza instrukcja przypisze zmiennej r obliczoną resztę z dzielenia: r = a % b, pozostałe instrukcje przypisania zmienią wartości zmiennych: a = b oraz b = r.

1
Polecenie 2

W programie pod komentarzem pętla obliczająca NWD zapisz odpowiednie instrukcje:

  • pętlę sprawdzającą warunek b > 0 (użyj instrukcji while),

  • wewnątrz pętli operacje wyliczania reszty (r = a % b) oraz przypisania (a = bb = r).

Gotowy kod:

Linia 1. kratka pobierz liczbę całkowitą a. Linia 2. a znak równości int otwórz nawias okrągły input otwórz nawias okrągły cudzysłów Podaj liczbę a dwukropek cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 4. kratka pobierz liczbę całkowitą b. Linia 5. b znak równości int otwórz nawias okrągły input otwórz nawias okrągły cudzysłów Podaj liczbę b dwukropek cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 7. kratka pętla obliczająca NWD. Linia 8. while b zamknij nawias ostrokątny 0 dwukropek. Linia 9. r znak równości a procent b. Linia 10. a znak równości b. Linia 11. b znak równości r. Linia 13. kratka wypisanie wyniku. Linia 14. print otwórz nawias okrągły cudzysłów NWD otwórz nawias okrągły a przecinek b zamknij nawias okrągły znak równości cudzysłów przecinek a zamknij nawias okrągły.

Przeanalizujmy operacje przypisania. Czy można wyeliminować zapisywanie reszty w zmiennej pomocniczej r? Czy jeden z dwóch zaprezentowanych niżej bloków kodu rozwiązałby ten problem?

Pierwsza propozycja

Linia 1. a znak równości b. Linia 2. b znak równości a procent b.

Druga propozycja

Linia 1. b znak równości a procent b. Linia 2. a znak równości b.

W obydwu wypadkach nie wykonamy poprawnych obliczeń. Przykładowo: niech a = 26 oraz b = 4.

W pierwszym przypadku wartość zmiennej a zostaje zastąpiona wartością zmiennej b, zatem w pierwszym kroku dla podanych danych otrzymamy a = 4 oraz b = 4, co w konsekwencji doprowadzi nas do sytuacji, w której a = 4 oraz b = 0, czyli NWD(a, b) wyniósłby 4, a to nie jest poprawna odpowiedź.

W drugiej propozycji w pierwszym kroku przypisujemy zmiennej b wynik obliczenia reszty z dzielenia ab. Przyjmując jako początkowe wartości zmiennych a = 26 oraz b = 4, po pierwszym kroku będą one miały wartości a = 26 oraz b = 2, a po drugim kroku a = 2 oraz b = 2. Dlatego w obliczeniach używamy zmiennej pomocniczejzmienna pomocniczazmiennej pomocniczej r, w której tymczasowo zapisujemy resztę a % b, zanim w następnym kroku zmienimy wartość zmiennej a.

Polecenie 3

Przetestuj powyższe propozycje dla różnych argumentów w kolejnych etapach w poniższej testerce.

R1GawqhbnWekD
Źródło: GroMar, licencja: CC BY 3.0.

Wynik działania programów zaprezentowanych w testerce:

Linia 1. Przypadek pierwszy dwukropek. Linia 2. a dwukropek 51 przecinek b dwukropek 13. Linia 3. a dwukropek 13 przecinek b dwukropek 0. Linia 4. Zwrócona wartość dwukropek 13. Linia 6. Przypadek drugi dwukropek. Linia 7. a dwukropek 51 przecinek b dwukropek 13. Linia 8. a dwukropek 12 przecinek b dwukropek 12. Linia 9. a dwukropek 0 przecinek b dwukropek 0. Linia 10. Zwrócona wartość dwukropek 0. Linia 12. Przypadek ze zmienną pomocniczą dwukropek. Linia 13. a dwukropek 51 przecinek b dwukropek 13. Linia 14. r dwukropek 12 a dwukropek 13 przecinek b dwukropek 12. Linia 15. r dwukropek 1 a dwukropek 12 przecinek b dwukropek 1. Linia 16. r dwukropek 0 a dwukropek 1 przecinek b dwukropek 0 przecinek. Linia 17. Zwrócona wartość dwukropek 1.

Pierwsze dwie funkcje działają błędnie – prawidłowa wartość NWD podanych liczb wynosi 1.

W funkcji nwd_pierwsza(a, b), po aktualizacji a na b, wartość b jest ustawiana na a % b, tymczasem b powinno przyjąć poprzednią wartość r (reszta z dzielenia a przez b).

W funkcji nwd_druga(a, b) najpierw aktualizujemy b, a następnie a, co prowadzi do utraty oryginalnej wartości a przed kolejną iteracją.

Funkcja

Obliczanie NWD można w programie wykonywać wielokrotnie dla różnych danych. Fragment kodu programu służący do obliczania NWD zapiszemy w funkcjifunkcjafunkcji o nazwie oblicz_nwd(). Funkcja będzie wymagała dwóch parametrów – liczb naturalnych ab. Zadaniem funkcji będzie obliczenie NWD liczb a i b oraz zwrócenie odpowiedniego wyniku.

Polecenie 4

Pisanie funkcji zacznij od nagłówka def oblicz_nwd(a, b), a następnie w ciele funkcji umieść pętlę obliczającą NWD. Na końcu funkcji wstaw instrukcję return a.

Użycie funkcji

W programie umieścimy wywołaniewywołanie funkcjiwywołanie funkcji oblicz_nwd(). Pobrane liczby (zmienne l1l2) przekażemy jako argumenty, tj. konkretne wartości parametrów w wywołaniu funkcji. Zwrócony wynik przypiszemy do zmiennej d, aby wypisać go na końcu programu.

1
Polecenie 5

Po instrukcjach wczytujących z klawiatury wartości zmiennych l1 oraz l2 (argumenty funkcji oblicz_nwd()) umieść instrukcję przypisania zmiennej do wyniku działania funkcji:

Linia 1. d znak równości oblicz podkreślnik nwd otwórz nawias okrągły l1 przecinek l2 zamknij nawias okrągły.

Dodaj na końcu instrukcję odpowiedzialną za wypisanie wyniku:

Linia 1. print otwórz nawias okrągły cudzysłów NWD otwórz nawias okrągły cudzysłów przecinek l1 przecinek cudzysłów przecinek cudzysłów przecinek l2 przecinek cudzysłów zamknij nawias okrągły znak równości cudzysłów przecinek d zamknij nawias okrągły.
1
Polecenie 6

Przetestuj napisany program wykorzystujący funkcję do obliczenia NWD dla następujących danych:

Linia 1. kratka Pierwszy zestaw danych. Linia 2. l1 znak równości 8. Linia 3. l2 znak równości 38. Linia 5. kratka Drugi zestaw danych. Linia 6. l1 znak równości 68. Linia 7. l2 znak równości 16. Linia 9. kratka Trzeci zestaw danych. Linia 10. l1 znak równości 7. Linia 11. l2 znak równości 17.

Skracanie ułamków

Jednym z zastosowań algorytmu Euklidesa jest skracanie ułamków zwykłych. Wykorzystamy napisany wcześniej program do tego zadania.

Przyjmiemy, że danymi będą licznik i mianownik ułamka, który chcemy skrócić. Powinny to być liczby całkowite większe od 0, więc do programu dodamy instrukcję warunkową, która będzie sprawdzała, czy tak jest. Jeżeli któraś z podanych liczb będzie mniejsza od jeden, wypiszemy komunikat i zakończymy program, wywołując funkcję exit():

Linia 1. if l1 otwórz nawias ostrokątny 1 or l2 otwórz nawias ostrokątny 1 dwukropek. Linia 2. print otwórz nawias okrągły cudzysłów Błędne dane wykrzyknik cudzysłów zamknij nawias okrągły. Linia 3. exit otwórz nawias okrągły zamknij nawias okrągły.

Skracanie ułamka zwykłego polega na podzieleniu licznika i mianownika przez tę samą liczbę - największy wspólny dzielnik licznika i mianownika. W tym wypadku liczbą będzie największy wspólny dzielnik zapisany w zmiennej d. Jeżeli będzie on większy niż 1, wypiszemy skrócony ułamek.

Pełen kod programu:

Linia 1. def oblicz podkreślnik nwd otwórz nawias okrągły a przecinek b zamknij nawias okrągły dwukropek. Linia 2. while b zamknij nawias ostrokątny 0 dwukropek. Linia 3. r znak równości a procent b. Linia 4. a znak równości b. Linia 5. b znak równości r. Linia 6. return a. Linia 8. l1 znak równości int otwórz nawias okrągły input otwórz nawias okrągły cudzysłów Podaj licznik dwukropek cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 9. l2 znak równości int otwórz nawias okrągły input otwórz nawias okrągły cudzysłów Podaj mianownik dwukropek cudzysłów zamknij nawias okrągły zamknij nawias okrągły. Linia 11. if l1 otwórz nawias ostrokątny 1 or l2 otwórz nawias ostrokątny 1 dwukropek. Linia 12. print otwórz nawias okrągły cudzysłów Błędne dane wykrzyknik cudzysłów zamknij nawias okrągły. Linia 13. exit otwórz nawias okrągły zamknij nawias okrągły. Linia 15. d znak równości oblicz podkreślnik nwd otwórz nawias okrągły l1 przecinek l2 zamknij nawias okrągły. Linia 16. print otwórz nawias okrągły cudzysłów NWD otwórz nawias okrągły cudzysłów przecinek l1 przecinek cudzysłów przecinek cudzysłów przecinek l2 przecinek cudzysłów zamknij nawias okrągły znak równości cudzysłów przecinek d zamknij nawias okrągły. Linia 18. if d zamknij nawias ostrokątny 1 dwukropek. Linia 19. print otwórz nawias okrągły cudzysłów Ułamek dwukropek cudzysłów przecinek l1 przecinek cudzysłów prawy ukośnik cudzysłów przecinek l2 zamknij nawias okrągły. Linia 20. print otwórz nawias okrągły cudzysłów Po skróceniu dwukropek cudzysłów przecinek l1 prawy ukośnik prawy ukośnik d przecinek cudzysłów prawy ukośnik cudzysłów przecinek l2 prawy ukośnik prawy ukośnik d zamknij nawias okrągły. Linia 21. else dwukropek. Linia 22. print otwórz nawias okrągły cudzysłów Ułamka nie da się skrócić kropka cudzysłów zamknij nawias okrągły.

W kodzie warto zwrócić uwagę na operator //, który oznacza dzielenie całkowite.

1
Polecenie 7

Przetestuj działanie programu dla następujących danych:

Linia 1. kratka Pierwszy zestaw danych. Linia 2. l1 znak równości 9. Linia 3. l2 znak równości 45. Linia 5. kratka Drugi zestaw danych. Linia 6. l1 znak równości 7. Linia 7. l2 znak równości 9.

Notatnik

R1FhhXaq8A0vG
Miejsce na Twoje notatki: (Uzupełnij) .

Symulacja interaktywna

R1HnYmDmqDrqF
Symulacja dotyczy algorytmów do znajdowania największego wspólnego dzielnika (NWD) przy użyciu dwóch metod: odejmowania i dzielenia modulo. Na grafice znajduje się instrukcja dotycząca analizy tych algorytmów. Instrukcja jest umieszczona w ramce z niebieskim obramowaniem, z ilustracją osoby w lewym górnym rogu oraz pytajnikiem w różowym kółku nad ilustracją. Po lewej stronie widnieje tekst: „Korzystając z przygotowanej symulacji, przeanalizuj, jak przebiega znajdowanie NWD w obydwu algorytmach dla wartości podanych w polach zamieszczonych pod symulacją. Zwróć uwagę na wartości, które przyjmują zmienne w kolejnych powtórzeniach oraz liczbę powtórzeń koniecznych do uzyskania wyniku. By wykonać jedno powtórzenie działania pętli, użyj przycisku „Wykonaj jedno powtórzenie”. By obliczyć od razu wynik końcowy, użyj przycisku „Oblicz wynik końcowy'”. W centralnej części grafiki znajdują się dwa prostokąty z pseudokodem algorytmów: pętla wykorzystująca odejmowanie oraz pętla wykorzystująca dzielenie modulo. Poniżej znajdują się pola do wprowadzenia wartości liczb a i b oraz dwa przyciski: „Wykonaj jedno powtórzenie” oraz „Oblicz wynik końcowy”. Pola te umożliwiają użytkownikowi interaktywne wprowadzenie danych i przeprowadzenie symulacji działania algorytmów.
Symulacja interaktywna
Źródło: GroMar Sp. z o.o., licencja: CC BY-SA 3.0.

Symulacja dotyczy algorytmów do znajdowania największego wspólnego dzielnika (NWD) przy użyciu dwóch metod: odejmowania i dzielenia modulo. Na grafice znajduje się instrukcja dotycząca analizy tych algorytmów. Instrukcja jest umieszczona w ramce z niebieskim obramowaniem, z ilustracją osoby w lewym górnym rogu oraz pytajnikiem w różowym kółku nad ilustracją. Po lewej stronie widnieje tekst: „Korzystając z przygotowanej symulacji, przeanalizuj, jak przebiega znajdowanie NWD w obydwu algorytmach dla wartości podanych w polach zamieszczonych pod symulacją. Zwróć uwagę na wartości, które przyjmują zmienne w kolejnych powtórzeniach oraz liczbę powtórzeń koniecznych do uzyskania wyniku. By wykonać jedno powtórzenie działania pętli, użyj przycisku „Wykonaj jedno powtórzenie”. By obliczyć od razu wynik końcowy, użyj przycisku „Oblicz wynik końcowy'”. W centralnej części grafiki znajdują się dwa prostokąty z pseudokodem algorytmów: pętla wykorzystująca odejmowanie oraz pętla wykorzystująca dzielenie modulo. Poniżej znajdują się pola do wprowadzenia wartości liczb a i b oraz dwa przyciski: „Wykonaj jedno powtórzenie” oraz „Oblicz wynik końcowy”. Pola te umożliwiają użytkownikowi interaktywne wprowadzenie danych i przeprowadzenie symulacji działania algorytmów.

1
Polecenie 8

Przeanalizuj w symulacji działanie algorytmu Euklidesa z wykorzystaniem odejmowania i działania reszty z dzielenia dla podanych niżej liczb. Podaj wynik oraz liczbę powtórzeń pętli dla każdego z algorytmów.

Do wykonania polecenia wykorzystaj następujące dane:

Linia 1. kratka Pierwszy zestaw. Linia 2. a znak równości 56. Linia 3. b znak równości 3. Linia 5. kratka Drugi zestaw. Linia 6. a znak równości 3. Linia 7. b znak równości 56.
R6mZ14trtjfr1
Wysłuchaj fragmentu książki innego filozofa, Oswalda Spenglera, pt. Zmierzch Zachodu (1918). Zastanów się i wyjaśnij tezę, iż cywilizacja jest dopełnieniem i zakończeniem kultury. Jak ma się ona do kryzysu Zachodu? (Uzupełnij).
1
Polecenie 9

Przeanalizuj w symulacji działanie algorytmu Euklidesa z wykorzystaniem odejmowania i działania reszty z dzielenia dla podanych niżej liczb. Podaj wynik oraz liczbę powtórzeń pętli dla każdego z algorytmów.

Do wykonania polecenia wykorzystaj następujące dane:

Linia 1. kratka Pierwszy zestaw danych. Linia 2. a znak równości 3. Linia 3. b znak równości 566. Linia 5. kratka Drugi zestaw danych. Linia 6. a znak równości 3. Linia 7. b znak równości 5666.
R6HCR7l0uGXZ5
Wysłuchaj fragmentu książki innego filozofa, Oswalda Spenglera, pt. Zmierzch Zachodu (1918). Zastanów się i wyjaśnij tezę, iż cywilizacja jest dopełnieniem i zakończeniem kultury. Jak ma się ona do kryzysu Zachodu? (Uzupełnij).

Zestaw ćwiczeń interaktywnych

1
Pokaż ćwiczenia:
R1TgTJ8iRKu2j1
Ćwiczenie 1
Wskaż poprawnie obliczone wartości NWD.
RtFxGsZEAWKkx1
Ćwiczenie 2
Wskaż, ile razy wykona się pętla while w algorytmie obliczania NWD z wykorzystaniem reszty z dzielenia dla liczb 170 oraz 2023.
RVsHd9M4sEGB12
Ćwiczenie 3
Zaznacz poprawne dokończenie zdania.
Jeżeli nagłówek funkcji wyliczającej NWD z wykorzystaniem algorytmu Euklidesa z działaniem reszty z dzielenia ma postać def NWD(a, b), pętla wykonująca obliczenia kończy się, kiedy…
RV4IIUDPTx1Mq2
Ćwiczenie 4
Uporządkuj podane instrukcje wewnątrz funkcji obliczającej NWD przy użyciu algorytmu Euklidesa z wykorzystaniem dzielenia. Elementy do uszeregowania: 1. a = b, 2. b = r, 3. r = a % b, 4. while b > 0:, 5. return a
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RvQxMmFeAXqSL2
Ćwiczenie 5
Zaznacz wszystkie poprawne odpowiedzi.
Do zakodowania pętli obliczającej NWD przy użyciu algorytmu Euklidesa z wykorzystaniem dzielenia użyjesz: Możliwe odpowiedzi: 1. instrukcji pobierania, 2. pętli for, 3. pętli while, 4. instrukcji przypisania, 5. instrukcji warunkowej
Źródło: Robert Bednarz, licencja: CC BY 3.0.
RwlNIhUuLwOfo2
Ćwiczenie 6
Po zakończeniu działania pętli w algorytmie Euklidesa obliczającym NWD z wykorzystaniem dzielenia i funkcji wynikiem jest: Możliwe odpowiedzi: 1. przedostatnia obliczona reszta, 2. zmienna b (drugi parametr), 3. ostatnia obliczona reszta, 4. zmienna a (pierwszy parametr)
Źródło: Robebert Bednarz, licencja: CC BY 3.0.
311
Ćwiczenie 7

Uzupełnij program obliczający największy wspólny dzielnik według algorytmu Euklidesa z wykorzystaniem działania reszty z dzielenia w taki sposób, aby wypisywał wartości przyjmowane przez zmienne r, a, b wykorzystywane w pętli while, liczbę wykonanych iteracji oraz największy wspólny dzielnik zadanych wartości l1 oraz l2.

Specyfikacja problemu:

Dane wejściowe:

  • l1, l2 - liczby naturalne

Wyniki:

  • wartości przyjmowane przez zmienne r, a i b w kolejnych iteracjach pętli while

  • tekst Liczba powtórzeń: oraz liczba iteracji (wartość zmiennej licznik)

  • wartości l1, l2 oraz NWD(l1, l2)

Przykład:

Dla l1 = 63l2 = 8:

Linia 1. 7 8 7. Linia 2. 1 7 1. Linia 3. 0 1 0. Linia 4. Liczba powtórzeń dwukropek 3. Linia 5. 63 8 1.

Ćwiczenie wykonaj w kolejnych etapach w poniższej testerce:

R19FI55kldpP31
Źródło: GroMar Sp. z o.o, licencja: CC BY 3.0.
311
Ćwiczenie 8

Napisz funkcję oblicz_nww(a, b), która będzie obliczała najmniejszą wspólną wielokrotność przekazanych argumentów. Program powinien wyświetlić liczby l1l2 oraz ich najmniejszą wspólną wielokrotność.

Specyfikacja problemu:

Dane wejściowe:

  • l1, l2 – liczby naturalne

Wyniki:

  • liczby l1l2 oraz NWW(l1, l2)

Przykład:

Dla l1 = 7l2 = 3:

Linia 1. 7 3 21.

Ćwiczenie wykonaj w kolejnych etapach w poniższej testerce:

R1AaVqIEjWbW21
Źródło: GroMar Sp. z o.o, licencja: CC BY 3.0.

Słownik

funkcja
funkcja

wyodrębniony i nazwany blok kodu zawierający instrukcje wykonujące najczęściej jedno zadanie; w języku Python definicja funkcji rozpoczyna się słowem kluczowym def

Linia 1. def nazwa podkreślnik funkcji otwórz nawias okrągły zamknij nawias okrągły dwukropek. Linia 2. kratka ciało funkcji.
parametry i argumenty funkcji
parametry i argumenty funkcji

parametry to zmienne umieszczane w nawiasach okrągłych w momencie definiowania funkcji, które symbolizują wartości wymagane do jej działania; argumenty to konkretne wartości liczbowe podawane w nawiasach okrągłych po nazwie funkcji w miejscu jej wywołania

wywołanie funkcji
wywołanie funkcji

uruchomienie funkcji polegające na wpisaniu jej nazwy wraz z nawiasami, w których mogą zostać podane argumenty (jeśli są wymagane)

zmienna pomocnicza
zmienna pomocnicza

zmienna tymczasowo przechowująca pośredni wynik obliczeń

5

Bibliografia

  • Bhargava A.Y., Algorytmy. Ilustrowany przewodnik, wyd. Helion, Gliwice 2017.

  • Lutz M., Python. Wprowadzenie (wyd. V), wyd. Helion, Gliwice 2022.

  • Algorytm Euklidesa, pl.wikipedia.org, dostęp 08.03.2024.

  • Największy wspólny dzielnik, encyklopedia.pwn.pl, dostęp 08.03.2024.