Lekcja programowania: Algorytm Euklidesa w Python
Docelową formą prezentacji algorytmu jest język wysokiego poziomu. Wybrałem Pythona ze względu na prostotę i rosnącą popularność zarówno na rynku jak i w edukacji. W Python można tworzyć algorytmy na maturze. Do kodu dodałem zmienną licznik, która nie ma bezpośredniego związku z algorytmem Euklidesa , ale jej zadaniem będzie policzenie ilości przebiegu pętli wskazującej NWD . Sprawdzimy w ten sposób wydajność obu wersji algorytmu.
Kod Python algorytmu Euklidesa - wyznaczanie NWD metodą przez odejmowanie.
- liczba1=int(input('podaj pierwszą liczbę: '))
- liczba2=int(input('podaj drugą liczbę: '))
- licznik=0
# początek pętli
- while liczba1!=liczba2:
- licznik+=1
- if liczba1>liczba2:
- liczba1=liczba1-liczba2
- else:
- liczba2=liczba2-liczba1
# koniec pętli
- print ("pętla wykonana {} razy".format(licznik))
- print("NWD to:", liczba1 )
Wyjaśnienie poszczególnych linii kodu:
- Wczytuję z klawiatury zmienną liczba1. Funkcja input wyświetla komunikat i czeka na wprowadzenie wartości. Funkcja int zamienia wprowadzoną wartość (domyślnie string) na liczbę typu integer.
- Jak w pk.1 ze zmienną liczba2.
- Tworzę zmienną licznik z wartością początkową O po to aby sprawdzić wydajność algorytmu. Zmienna będzie zliczała przebiegi pętli.
- Początek pętli dopóki liczba1 jest różna od liczba2 (!= operator nie są sobie równe).
- Dodaję 1 do wartości zmiennej licznik, jest to skrót zapisu licznik = licznik+1.
- Początek instrukcji warunkowej jeżeli liczba1 jest większa od liczba2.
- Jeżeli warunek z pk. 6 jest spełniony podstaw do liczba1 wartość liczba1-liczba2.
- W przeciwnym wypadku (do warunku z pk6).
- Jeżeli warunek z pk. 6 nie jest spełniony, podstaw do liczba2 wartość liczba2-liczba1.
Koniec pętli. - Wyprowadź na ekran komunikat, zastosowałem funkcję format, która wstawi wartość zmiennej licznik do nawiasu {}.
- Wyprowadź wartość NWD. Można byłoby użyć funkcji format. Kod tej linijki wyglądałby tedy tak: print("NWD to : {}".format(liczba1) ).
Kod Python algorytmu Euklidesa - wyznaczanie NWD metodą przez dzielenie.
- liczba1=int(input('podaj pierwszą liczbę: '))
- liczba2=int(input('podaj drugą liczbę: '))
- licznik=0
- if liczba2==0:
- print("NWD to:",liczba1)
- else:
# początek pętli
- while liczba2>0:
- licznik+=1
- reszta=liczba1%liczba2
- liczba1=liczba2
- liczba2=reszta
# koniec pętli
- print("pętla wykonana {} razy".format(licznik))
- print("najwiekszy wspolny dzielnik to:",liczba1)
Wyjaśnienie poszczególnych linii kodu:
- Wczytuję z klawiatury zmienną liczba1. Funkcja input wyświetla komunikat i czeka na wprowadzenie wartości. Funkcja int zamienia wprowadzoną wartość (domyślnie string) na liczbę typu integer.
- Jak w pk.1 ze zmienną liczba2.
- Tworzę zmienną licznik z wartością początkową O po to aby sprawdzić wydajność algorytmu. Zmienna będzie zliczała przebiegi pętli.
- Jeżeli liczba 2 jest równa 0 to przejdź do pk.5.
- Wyprowadź komunikat NWD to : wartość liczba1.
- W przeciwnym wypadku przejdź do pk.7.
- Początek pętli dopóki liczba2 jest większa od O.
- Dodaję 1 do wartości zmiennej licznik, jest to skrót zapisu licznik = licznik+1.
- Wstawiam do zmiennej reszta, resztę z dzielenia liczba1 przez liczba 2 (% operator modulo)
- Wstawiam wartość zmiennej liczba2 do liczba1
- Wstawiam wartość zmiennej reszta do liczba2
Koniec pętli. - Wyprowadź na ekran komunikat, zastosowałem funkcję format, która wstawi wartość zmiennej licznik do nawiasu {}.
- Wyprowadź wartość NWD. Można byłoby użyć funkcji format. Kod tej linijki wyglądałby tedy tak: print("NWD to : {}".format(liczba1) ).
Algorytm metodą przez odejmowanie wykona dla pary liczb 123456789 i 2 pętlę 61728395 razy, a algorytm metodą przez dzielenie dla tej samej pary liczb wyświetli wartość 2 licznika pętli.
Czas działania algorytmu bazującego na metodzie przez odejmowanie przy dużych liczbach jest znaczący, wykonanie takiej ilości operacji musi trwać.
Zapraszam na warsztaty z cyklu jaku uczyć programowania organizowane przez nasz ośrodek.
Marek Wróblewski
m.wroblewski@odn.slupsk.pl