Szkoła Podstawowa nr 1 w JarosławiuSzkoła Podstawowa nr 1 w Jarosławiu
Algorytmy na liczbach naturalnych
Algorithms on Natural Numbers
📚 Warto powtórzyć
📚 Review before the lesson
Czym jest algorytm?
Czym jest specyfikacja problemu (zadania)?
Na czym polega przedstawianie algorytmu w postaci listy kroków?
W jaki sposób przedstawiamy na schemacie blokowym sytuację warunkową?
Na czym polega iteracja?
Jaką instrukcję stosujemy do zapisywania sytuacji warunkowej w Pythonie? Wyjaśnij jej działanie.
Jaką instrukcję stosujemy do zapisywania iteracji w Pythonie? Wyjaśnij jej działanie.
What is an algorithm?
What is a problem specification?
What does presenting an algorithm as a list of steps involve?
How do we represent a conditional situation in a flowchart?
What is iteration?
What instruction do we use for conditionals in Python? Explain how it works.
What instruction do we use for iteration in Python? Explain how it works.
Na lekcjach informatyki w klasie ósmej poznamy podstawowe algorytmy na liczbach naturalnych stosowane w matematyce i informatyce. Zapiszemy je w języku programowania Python. W tym temacie:
In eighth-grade computer science, we will learn fundamental algorithms on natural numbers used in mathematics and computer science. We will implement them in Python. In this topic:
poznasz i zaprogramujeszyou will learn and programalgorytm badania podzielności liczb,the divisibility testing algorithm,
poznasz i zaprogramujeszyou will learn and programalgorytm Euklidesa w dwóch wersjach: z odejmowaniem i z resztą z dzielenia,Euclid's algorithm in two versions: subtraction and division remainder,
poznasz i zaprogramujeszyou will learn and programalgorytm wyodrębniania cyfr danej liczby.the digit extraction algorithm.
1Badanie podzielności liczb naturalnychTesting Divisibility of Natural Numbers
Jeśli reszta z dzielenia dwóch liczb naturalnych jest równa zero, mówimy, że pierwsza liczba (dzielna) jest podzielna przez drugą (dzielnik).If the remainder when dividing two natural numbers equals zero, we say the first number (dividend) is divisible by the second (divisor).
Operator modulo:Modulo operator: Do wyznaczania reszty z dzielenia używamy operatora mod. Zapis reszta = a mod b oznacza, że zmiennej reszta przypisano resztę z dzielenia a przez b. W Pythonie: reszta = a % bWe use the mod operator to find the remainder. remainder = a mod b means the variable remainder gets the remainder of a÷b. In Python: remainder = a % b
Specyfikacja zadania – Badanie podzielności
Algorithm Specification – Divisibility Test
Zadanie:
Task:
Sprawdź, czy liczba naturalna a jest podzielna przez liczbę naturalną b (b ≠ 0).
Check whether natural number a is divisible by natural number b (b ≠ 0).
Dane:
Input:
Liczby naturalne: a, b (b ≠ 0)
Wynik:
Output:
Komunikat o podzielności lub jej braku
Message about divisibility or lack thereof
Lista kroków:
Step list:
Zacznij algorytm.Start the algorithm.
Wprowadź wartość dzielnej a.Input the value of dividend a.
Wprowadź wartość dzielnika b.Input the value of divisor b.
Zmiennej reszta przypisz wartość wyrażenia amodb.Assign the value of amodb to variable remainder.
Jeżeli reszta jest równa zero – wyprowadź: „a jest podzielne przez b"; w przeciwnym przypadku: „a nie jest podzielne przez b".If remainder = 0 output „a is divisible by b"; otherwise „a is not divisible by b".
Zakończ algorytm.End the algorithm.
Rys. 2. Schemat blokowy algorytmu badania podzielności liczb
Fig. 2. Flowchart of the divisibility testing algorithm
Tabela 1. Testowanie algorytmu badania podzielności
Table 1. Testing the divisibility algorithm
a
b
Obliczenie resztyRemainder
Czy reszta = 0?Remainder = 0?
KomunikatMessage
42
7
42 mod 7 = 0
TAK
YES
a jest podzielne przez b
a is divisible by b
245
8
245 mod 8 = 5
NIE
NO
a nie jest podzielne przez b
a is not divisible by b
27
6
27 mod 6 = 3
NIE
NO
a nie jest podzielne przez b
a is not divisible by b
18
6
18 mod 6 = 0
TAK
YES
a jest podzielne przez b
a is divisible by b
125
5
125 mod 5 = 0
TAK
YES
a jest podzielne przez b
a is divisible by b
🐍 Python – Podzielnosc.pyPython – Divisibility.py
a = int(input("Wprowadź wartość dzielnej: "))
b = int(input("Wprowadź wartość dzielnika: "))
if a % b == 0:
print("a jest podzielne przez b")
else:
print("a nie jest podzielne przez b")
input("\n\nAby zakończyć, naciśnij Enter")
Algorytm Euklidesa służy do znajdowania największego wspólnego dzielnika (NWD) dwóch liczb naturalnych różnych od zera. NWD możemy wykorzystać np. do skracania ułamków – licznik i mianownik dzielimy przez ich NWD.Euclid's Algorithm finds the Greatest Common Divisor (GCD) of two non-zero natural numbers. GCD is useful e.g. for simplifying fractions – divide numerator and denominator by their GCD.
2a. Wersja z odejmowaniem
2a. Subtraction version
Euklides zauważył, że NWD dwóch liczb jest taki sam jak NWD ich różnicy. Dlatego od większej liczby odejmujemy mniejszą i zastępujemy większą otrzymaną różnicą – powtarzamy, dopóki obie liczby nie będą równe.
Euclid noticed that the GCD of two numbers equals the GCD of their difference. We subtract the smaller from the larger and replace the larger with the result – we repeat until both numbers are equal.
Lista kroków – wersja z odejmowaniem
Step list – subtraction version
Zacznij algorytm.Start.
Wprowadź wartości a i b.Input values a and b.
Sprawdź, czy a = b: jeśli tak, idź do kroku 7.Check if a = b: if yes, go to step 7.
Jeżeli a > b: zmiennej a przypisz a – b; w przeciwnym przypadku zmiennej b przypisz b – a.If a > b: assign a – b to a; otherwise assign b – a to b.
a = int(input("Podaj pierwszą liczbę: "))
b = int(input("Podaj drugą liczbę: "))
while a != b:
if a > b:
a = a - b
else:
b = b - a
print("NWD =", a)
input("\n\nAby zakończyć, naciśnij Enter")
2b. Wersja z resztą z dzielenia
2b. Division remainder version
Wersja z resztą z dzielenia jest znacznie szybsza. Wykonujemy kolejne dzielenia: dzielną zastępujemy dzielnikiem, a dzielnik – resztą z dzielenia, aż reszta wyniesie 0. Wynikiem jest ostatnia niezerowa reszta.
The division remainder version is much faster. We repeatedly divide: replace the dividend with the divisor and the divisor with the remainder, until the remainder equals 0.
Uwaga o zmiennej pomocniczej:⚠ Note on auxiliary variable: Jeśli pod tę samą zmienną podstawiamy kolejną wartość, poprzednia wartość znika. Dlatego wartość b musimy przechować w zmiennej pomocniczej dzielnik. Assigning a new value to a variable overwrites the old one. We must save b's value in an auxiliary variable divisor first.
Lista kroków – wersja z resztą z dzielenia
Step list – division remainder version
Zacznij algorytm.Start.
Wprowadź wartości a i b.Input values a and b.
Sprawdź, czy b = 0: jeśli tak, idź do kroku 9.Check if b = 0: if yes, go to step 9.
Zmiennej dzielnik przypisz wartość b.Assign b to variable divisor.
Zmiennej b przypisz resztę z dzielenia a przez b.Assign remainder of a÷b to b.
Zmiennej a przypisz wartość dzielnik.Assign divisor to a.
Idź do kroku 3.Go to step 3.
Wyprowadź wynik: NWD = a.Output: GCD = a.
Zakończ algorytm.End.
Tabela 3. Testowanie algorytmu Euklidesa – wersja z resztą (a=28, b=35)
Table 3. Testing Euclid's algorithm – remainder version (a=28, b=35)
a = int(input("Podaj pierwszą liczbę: "))
b = int(input("Podaj drugą liczbę: "))
while b != 0:
dzielnik = b # zapamiętaj aktualny dzielnik
b = a % b # reszta z dzielenia
a = dzielnik # dzielnik staje się nową dzielnąprint("NWD =", a)
input("\n\nAby zakończyć, naciśnij Enter")
ĆWICZENIE 3EXERCISE 3📐 Kalkulator NWD z wizualizacją kroków📐 GCD Calculator with step visualization
Podaj dwie liczby naturalne. Algorytm obliczy NWD metodą z resztą z dzielenia i pokaże każdy krok.
Enter two natural numbers. The algorithm will find GCD using the division remainder method and show every step.
Sprawdzania podzielności liczbTesting divisibility of numbers
B
Znajdowania największego wspólnego dzielnika (NWD)Finding the greatest common divisor (GCD)
C
Wyodrębniania cyfr liczbyExtracting digits of a number
D
Sortowania liczbSorting numbers
3Wyodrębnianie cyfr danej liczby naturalnejExtracting Digits of a Natural Number
Aby wyodrębnić cyfry liczby naturalnej (od cyfry jedności), powtarzamy obliczanie reszty z dzielenia przez 10 – pierwsza reszta to cyfra jedności. Następnie odejmujemy tę cyfrę od liczby i dzielimy przez 10, aż do uzyskania wyniku równego zero.To extract digits of a natural number (from the units digit), we repeatedly compute the remainder of dividing by 10 – the first remainder is the units digit. Then we subtract that digit and divide by 10, until the result is zero.
Specyfikacja zadania – Wyodrębnianie cyfr
Algorithm Specification – Digit Extraction
Dane:
Input:
Liczba naturalna różna od 0: liczba
Natural number different from 0: number
Wynik:
Output:
Cyfry danej liczby, zaczynając od cyfry jedności
The digits of the number, starting from the units digit