WPROWADZENIE DO ALGORYTMÓW
Transkrypt
WPROWADZENIE DO ALGORYTMÓW
WPROWADZENIE DO ALGORYTMÓW Mariusz Różycki 11 września 2012 1. Ocenianie a. Po pierwsze – na lekcjach będę czasem zadawać pytania. Osoba, która udzieli poprawnej odpowiedzi dostanie plusa. Każde 3 plusy zamieniane będą na ocenę bardzo dobrą z aktywności. b. Po drugie – prace domowe. Dopóki będziemy omawiać algorytmy, na koniec każdej lekcji dawać będę wam co najmniej 3 zadania. Przynajmniej 2 dla osób, które chcą sobie poćwiczyć zagadnienia z lekcji. Będą to zadania proste. Nie jest obowiązkowe ich wykonywanie z lekcji na lekcję. Zwróćcie jednak uwagę, ze mieszczą się one w omawianym zakresie materiału, więc mogą się pojawić na klasówce lub zapowiedzianej kartkówce. Rozwiązania tych zadań można przynieść na lekcję lub wysłać je do mnie, wtedy je sprawdzę lub pomogę w razie wątpliwości. Nie będzie to jednak oceniane. c. Kolejne zadanie (czasem będą to 2 zadania) będzie obowiązkowe. Będą to zadania nieco trudniejsze niż te wspomniane przed chwilą, jednak nadal do wykonania bez nadmiernego wysiłku przez osoby, które opanowały materiał z lekcji. Rozwiązań tych zadań nie musicie ani przynosić na lekcję ani wysyłać do mnie – macie je umieć zrobić i krótko omówić. Do tej kategorii (ale nie do limitu dwóch zadań) zaliczają się także te rozwiązane na lekcji, nawet jeżeli nie będzie to dodatkowo zaznaczone. Na każdej lekcji jedna osoba będzie brana do odpowiedzi właśnie z tych zadań, możliwa jest też niezapowiedziana kartkówka. Przy odpowiedzi z pracy domowej niedozwolone są jakiekolwiek pomoce naukowe. Każda osoba ma do dyspozycji jedno nieprzygotowanie w semestrze, które zwalnia z odpowiedzi i niezapowiedzianych kartkówek. d. Czasami zdarzy się, że pojawi się jeszcze jedno (lub dwa) zadanie, dla chętnych. Będzie ono nieco trudniejsze, wykraczające poza materiał z lekcji. Jeżeli ktoś zrobi je (bez mojej czy pana Obczyńskiego pomocy) i omówi je na lekcji (lub na przerwie, jeżeli zabraknie czasu), może dostać 6 z aktywności. 2. Wolfram Alpha a. Jest to strona internetowa, która może być wam przydatna w nauce matematyki. Jest zaawansowaną wyszukiwarką, ale potrafi także rozwiązywać równania, szkicować wykresy, liczyć pochodne i całki, rozwiązywać równania różniczkowe itp. b. Wymaga nieco znajomości angielskiego, ale tylko trochę. Przy funkcjach trygonometrycznych trzeba uważać – zgodnie ze zwyczajem panującym w krajach anglosaskich Wolfram Alpha używa funkcji secans i cosecans, które są odwrotnościami funkcji cosinus i sinus. Zatem sec x = 1/cos x. c. Adres to wolframalpha.com 3. Czym jest algorytm? a. Definicja ze Słownika Języka Polskiego PWN mówi, że jest to „ściśle określony ciąg czynności, których wykonanie prowadzi do rozwiązania jakiegoś zadania”. W kontekście informatycznym mówi się także o czynnościach przekształcających dane wejściowe w dane wyjściowe. Bardziej po ludzku, algorytm to po prostu pewien sposób zrobienia czegoś. b. Istnieje wiele rodzajów algorytmów, nie tylko typowo matematycznych jak algorytm rozkładu liczby na czynniki pierwsze, ale także w życiu codziennym – na przykład algorytm robienia naleśników. 4. Opis algorytmu a. Nauka o algorytmach nie miałaby sensu, gdyby algorytmy nie były powtarzalne. Idzie za tym konieczność posiadania możliwości zapisu algorytmu. b. Pozostając przy przykładzie algorytmu robienia naleśników, jego zapisem będzie nic innego, jak przepis na naleśniki. Wszyscy wiemy, jak z reguły wyglądają przepisy kulinarne. Najpierw lista składników, potem opis przyrządzenia danej potrawy. c. Oprócz książki kucharskiej, opisy algorytmów znajdziemy w przeróżnych instrukcjach obsługi, poradnikach, podręcznikach itp. Nie będziemy się takimi algorytmami z życia codziennego zajmowali, jednak warto wiedzieć, że to również są algorytmy. d. W podobny sposób, co przepis na naleśniki (nawet z odpowiednikiem listy składników), możemy opisać wspomniany wcześniej algorytm znajdowania rozkładu liczby na czynniki pierwsze. Taki sposób zapisu nazywamy listą kroków. e. Istnieją oczywiście inne sposoby zapisu algorytmów, na przykład przy użyciu schematu blokowego, czy języków programowania. Tym jednak zajmiemy się później. 5. Stopień formalizmu zapisu algorytmu a. Wróćmy na chwilę do przepisu na naleśniki. Czy każdy, mając przed sobą taki opis (i oczywiście potrzebne narzędzia i składniki), byłby w stanie zrobić naleśniki? Na pewno są osoby, które by sobie nie poradziły. b. Nie każdy przecież wie, jaka konsystencja jest prawidłowa, co to znaczy, że naleśnik się zarumienił. Niektórzy stając przy garach z nerwów mogą zapomnieć, jaki jest ich ulubiony dżem. W końcu – nie każdy musi lubić dżem. c. Nawet pokazany wcześniej opis algorytmu znajdowania rozkładu liczby na czynniki pierwsze nie jest wolny od tego problemu. Dla przykładu, nie każdy musi wiedzieć, czym jest liczba pierwsza. d. Nie trzeba szukać daleko – próbując zaimplementować ten algorytm w dowolnym języku programowania musielibyśmy wytłumaczyć komputerowi jak ma znaleźć najmniejszą liczbę pierwszą. Co więcej – musielibyśmy mu także wyjaśnić, co znaczy, że dana liczba jest podzielna przez inną! e. Dlatego zapisując algorytm trzeba przyjąć pewien stopień formalizmu, pewien zbiór pojęć i czynności pierwotnych, które uznajemy za powszechnie zrozumiałe. Oczywiście to jak ten zbiór wygląda, zależy od sytuacji. f. Przykład spoza świata informatyki: idziesz do odpowiedzi na matematyce i w pewnym momencie musisz przemnożyć dwie liczby dwucyfrowe. Chociaż jest możliwe zrobić to w pamięci, to prędzej zrobisz to metodą pisemną (pomińmy tutaj liczenie na kalkulatorze). Nie musisz wtedy tłumaczyć co robisz – nauczyciel i wszystkie osoby w klasie powinny wiedzieć co to jest. Jednak spróbuj zrobić coś takiego przed uczniem pierwszej klasy podstawówki. g. Drugi przykład – na studiach, po omówieniu całek (niestety w Polsce często także i wcześniej), wykładowcy przyjmą, że je znasz. I będą używać ich tak samo, jak ty teraz mnożenia czy potęgowania. Jednak gdybym próbował teraz użyć na zajęciach całki, musiałbym wytłumaczyć co to jest i jak działa. h. Na potrzeby naszych zajęć przyjmijmy, że do naszego zbioru pojęć pierwotnych należą wszystkie pojęcia i czynności matematyczne, które powinien znać uczeń rozpoczynający naukę w gimnazjum: dodawanie, odejmowanie, mnożenie, dzielenie, dzielenie z resztą (głównie chodzi tu o resztę), porównywanie liczb, sprowadzanie ułamków do wspólnego mianownika itp. 6. Praca domowa a. Zadania ćwiczebne, nieobowiązkowe i. Zapisać w postaci listy kroków algorytm przechodzenia przez ulicę. ii. Zapisać w postaci listy kroków algorytm dodawania pisemnego. b. Zadania obowiązkowe i. (z lekcji) Zapisać w postaci listy kroków algorytm znajdowania rozkładu liczby na czynniki pierwsze. ii. (z lekcji) Zapisać w postaci listy kroków algorytm rozwiązywania równania liniowego. iii. Zapisać w postaci listy kroków algorytm dodawania ułamków zwykłych. c. Zadania trudniejsze, nieobowiązkowe i. Zapisać w postaci listy kroków algorytm znajdowania liczby rozwiązań równania liniowego. Jeżeli posiada jedno rozwiązanie, dodatkowo należy je podać. ii. Zapisać w postaci listy kroków algorytm znajdowania najmniejszej liczby pierwszej nie mniejszej od danej liczby n. Przykładowo, dla n = 20 poprawną odpowiedzią jest 23, a dla n = 103 odpowiedź to 103.