Tak nieszczęśliwie się złożyło, że niektóre grupy będą miały siedem laboratoriów inne zaś osiem (co zależy od parzystości tygodnia).
Zatem ostatnie laboratorium (ostatnie dwa laboratoria) poświęcone będą programowaniu w języku Python.
Tematyka zajęć w kolejnym semestrze będzie obejmowała programowanie w języku C — nie powinien to być specjalny problem.
Studenci na zajęciach siódmych rozpoczynają realizację zadań od „wprawek” (rozdział 2), a następnie kontynuują zadania do wykonania (rozdział 3) tyle ile dadzą rady. Im kto więcej zrobi tym lepsza ocena.
Zatem dla tych, którzy istotnie mają zajęcia ósme:
Celem laboratorium jest zmierzenie się z (nowym?) językiem programowania i zaprogramowanie bardzo prostych problemów. Przy czym chciałbym aby samo programowanie poprzedzone było narysowaniem prostego schematu blokowego. Jako podstawowy zestaw bloków stosowanych na schematach blokowych można przyjąć ten z Wikipedii.
Zapoznanie się z elementarną dokumentacją programu Python (instrukcja laboratoryjna nr 4 [1] i/lub bardziej zaawansowaną dokumentacją po polsku dostępną on-line [2].
Bardzo często programując w jakimś języku programowania musimy skorzystać z jakiejś funkcji. Python dostarcza bardzo wiele funkcj, a na przykłąd najbardzie podstawowe funkcje matematyczne dostępne są w module math. Na początkuy programu piszemy:
a poźniej możemy z funkcji korzystać swobodnie:
(Sprawdź jaki będzie wynik!)
Mozemy również zdefiniować własną funkcję. Będzie to funkcja f(x) = 3x2 − 5x + 2. (Zwracam uwagę na wcięcie!)
Po jej zdefiniowaniu możemy już funkcji używać:
albo
albo
W powyższym przykładzie x jest zmienną niezależną (tak jak w funkcji sin(x)), a polecenie return powoduje wyliczenie wartości i „podstawienie jej pod f(x)”. Funkcję można zdefiniować również tak:
Teraz polecenie return zwraca (wyliczoną wcześniej) wartość y jako wartość funkcji f(x).
Poniżej rekurencyjna definicja funkcji silnia
Sprawdź czy funkcja działa.
Zaczynamy od wprawek.
Zmodyfikuj program tak, by rozpoznawał przypadek gdy a jest równe zero i informował o tym.
Zmodyfikuj go tak aby drukował tablicę funkcji x2 dla x zmieniającego się od -10 do 10 włącznie.
Przy okazji, jaki będzie wynik programu?
A tego:
Peksperymentuj i opisz działanie instrukcji while.
Wariant rekurencyjny wyznaczania NWD wygląda jakoś tak: gcd(k,n) = n gdy k = 0 natomiast gcd(k,n) = gcd(n mod k,k) gdy k > 0.
Ciąg Fibonacciego jestjednym z wielu przykładów „operacji” zdefiniowanej rekurencyjnie.
Zadaniem jest zaprogramowanie (w Pythonie) rekurencyjnej funkcji wyliczającej zadany wyraz ciągu.
Dodatkowo programpowinien zliczać liczbę wywołań funkcji. W tym celu należy jedną zmienna przeznaczyć na licznik i zaraz po wejściu do funkcji zwiększać ten licznik o jeden.
Przed zakończeniem obliczeń program powinien wyswietlać wyliczony wyraz ciągu oraz liczbę wywołań funkcji.
Oto jedna z jego wersji algorytmu Euklidesa: Dane są dwie dodatnie liczby całkowite m i n, należy znaleźć ich największy wspólny dzielnik (NWD) tj. największą dodatnią liczbę całkowitą, która dzieli całkowicie zarówno m jak i n.
Załóżmy, że mamy wyznaczyć pierwiastek stopnia n z liczby w, czyli znaleźć taką liczbę x, że:
| (1) |
lub inaczej:
| (2) |
Jeżeli oznaczymy f(x) = xn −w to zadanie to można zapisać ogólniej: należy znaleźć takie x, że f(x) = 0.
Jeżeli zadanie dodatkowo uprościmy zakładając:
to możemy naszkicować następujący rysunek ilustrujący nasze zadanie:
Zaczynamy w punkcie g; wartość funkcji w tym punkcie wynosi f(g). Musimy w jakiś sposób zdecydować w którym kierunku należy wykonać następny krok. Zauważmy, że możemy w tym celu wykorzystać pochodną (czerwona, przerywana linia na powyższym rysunku). Jeżeli przybliżymy funkcję za pomocą pochodnej (stycznej do funkcji, przechodzącej przez punk (g,f(g) to następnym przybliżeniem będzie punkt przecięcia stycznej z osią x.
Z równania prostej mamy:
| (3) |
czyli
| (4) |
i dalej
| (5) |
Jeżeli zauważymy, że f(x) = xn − w oraz, że f′(x) = nxn−1 to kolejne przybliżenie wyliczane będzie ze wzoru:
| (6) |
albo
| (7) |
Gdy n = 2, wówczas
| (8) |
Program będzie się składał z trzech części:
[1] Wojciech Myszka. Technologie informacyjne mechatronika 2010/2011 błędy obliczeń. python. Instrukcja laboratoryjna dostępna: http://www.immt.pwr.wroc.pl/~myszka/MCM1001/L04/l04.html, 2010.
[2] Mark Pilgrim. Dive Into Python. Apress, Lipiec 2004. Dostępne jest polskie tłumaczenie on-line: http://pl.wikibooks.org/wiki/Zanurkuj_w_Pythonie zatytułowane Znurkuj w Pytonie.