We wcześniejszej lekcji napisaliśmy 6 programów będących implementacją algorytmu Euklidesa wyliczającego największy wspólny dzielnik. Co to jest algorytm? Mówiąc opisowo jest to sposób rozwiązania jakiegoś zadania. Bądźmy jednak bardziej drobiazgowi i przedstawy bardziej naukową definicję:
Algorytm to skończony, uporządkowany ciąg jasno zdefiniowanych czynności, koniecznych do wykonania pewnego zadania.
Aby jeszcze lepiej zrozumieć istotę algorytmów przanalizujmy przepis kulinarny który może być przykładem algorytmu. Oto przepis na jedną z moich ulubionych potraw czyli Placki ziemniaczane:
Placki ziemniaczane - składniki
6 dużych ziemniaków
1-2 jajka
3-4 łyżki mąki
sól
pieprz
olej
sposób przygotowania
- Ziemniaki umyć, obrać.
- Zetrzeć na tarce (małe lub duże otwory, jak lubimy).
- Wymieszać z mąką, jajkiem, solą i pieprzem.
- Rozgrzać patelnię z olejem.
- Placuszki smażyć z obu stron.
- Potem na talerz.
Jak widzimy przepis jest skończony - kiedyś w końcu zjemy pierwszego usmażonego placka. Poszczególne etapy są uporządkowane. Nieprzestrzeganie porządku zakończyłoby się powstaniem całkiem nieokreślonej potrawy najprawdobodobniej niejadalnej (tak wiem, student wszystko zje ;)). Jest jeszcze jedna analogia pomiędzy przepisem kulinarnym a algorytmem. Algorytm przetwarza jakieś dane wejściowe w dane wyjściowe. Składniki na placki (mąka, jajka, ziemniaki) są pięknie zamieniane na ciepłe, pyszne placki ziemniaczane.
Skoro już wiemy czym jest algorytm spróbujmy zdefiniować pojęcie programu:
Program to algorytm zapisany w języku komputerowym.
Wydaje się logiczne. Ale czym jest Język komputerowy?
Język komputerowy to język z określoną notacją i regułami rozumiany przez komputer.
Czyli w przeciwieństwie do języków naturalnych takich jak polski czy francuski, języki komputerowe są zrozumiałe dla maszyny. Komputer nie potrafi zrobić placków ziemniaczanych, ponieważ nie rozumie języka w którym przepis został zanotowany. Językami omawianymi w tym kursie są C, LISP, Java, PHP, Python i Ruby. Ważne jest, aby zrozumeć, że te języki mają ściśle określoną składnię (jaka kombinacja słów kluczowych i symboli jest dopuszczalna?) i semantykę (co oznaczają wyrażenia dopuszczalne przez składnię?)
Ostatnim pojęciem omawianym w dzisiejszym mocno teoretycznym odcinku jest programowanie:
Programowanie to proces układania programów dla komputerów.
Ten kurs ma Cię nauczyć właśnie programowania czyli pisania programów. Powinieneś pamiętać że ten proces najogólniej mówiąc składa się z dwóch etapów:
- Etap projektowania(układanie algorytmu)
- Etap implementacji(tłumaczenie algorytmu na język programowania)
Zaniedbanie pierwszego etapu jest częstym błędem początkujących programistów, czego efektem są bądź nie działające programy, badź programy kiepskiej jakości.
Przedstawmy na przykładzie algorytmu Euklidesa jak powinien wyglądać proces programowania
Najpierw wymyślamy algorytm
dopóki b ≠ 0 wykonuj wylicz resztę z dzielenia a przez b i podstaw ją pod a zamień a z b
Następnie wymyślony algorytm kodujemy w wybranym języku dla przykładu Python:
def nwd(a,b):
while b != 0:
a = a % b
a, b = b, a
return a
Zadanie
Zastanowić się nad innymi przykładami algorytmów.