Zestaw 2: Funkcje, pętle, sterowanie
System Sage wykorzystuje język Python. Ten zestaw ma nauczyć zupełnych podstaw programowania w Pythonie. Jako materiały pomocnicze można użyć podręczników:
Funkcje i sterowanie
Funkcję (w sensie programistycznym) w Sage'u (sensu stricte Pythonie) implementuje się:
def nazwa ( argumenty ) :
treść
...
return wynik
Zasięg bloku ograniczającego jest wyznaczony przez wcięcie (grrr...)!
Zadanie: Napisać funkcję, która zwraca kwadraty wszystkich dzielników pierwszych argumentu.
Jeżeli na początku funkcji (w kolejnej linii po def) umieścimy opis funkcji w potrójnych cudzysłowach, to po skomilowaniu opis ten będzie dodany do systemu pomocy Sage'a i będzie się wyświetlał dla naszej funkcji po naciśnięciu klawisza Tab.
Zadanie: Napisać funkcję, która przyjmuje jako argument liczbę naturalną , a w wyniku zwraca listę potęg dwójki do -tej włącznie.
Zadanie: Napisać funkcję, która przyjmuje jako argument listę , zaś w wyniku zwraca dwie listy oraz , składające się z elementów listy , mających odpowiednio parzyste i nieparzyste indeksy.
Zadanie: Napisać funkcję, która przyjmuje jako argument liczbę naturalną , a w wyniku zwraca ilość liczb pierwszych mniejszych od , które nie dzielą .
Przykład: Dla liczby funkcja winna zwrócić wynik , gdyż liczbami pierwszymi i nie dzielącymi są oraz .
Instrukcja warunkowa ma składnię:
if warunek :
treść
lub w wersji rozbudowane
if warunek :
treść
else :
treść
Zadanie: Napisać funkcję, która przyjmuje jako argument liczbę całkowitą i zwraca w wyniku najmniejszą liczbę parzystą .
Zadanie: Zaimplementować rekurencyjną wersję algorytmu Euklidesa.
Zadanie: Zaimplementować w Sage'u funkcję zadaną dla listy warunkiem rekurencyjnym:
Defincja: Liczby nazywa się zaprzyjaźnionymi (ang. amicable), jeżeli suma dzielników właściwych (czyli różnych od ) liczby jest równa , zaś suma dzielników właściwych (czyli różnych od ) liczby jest równa .
Przykład: Liczby 220, 284 są zaprzyjaźnione.
Zadanie: Napisać funkcję, która sprawdza czy dwie podane liczby są zaprzyjaźnione.
Defincja: Liczby nazywa się zaręczonymi (ang. betrothed), jeżeli suma dzielników właściwych (czyli różnych od ) liczby jest równa , zaś suma dzielników właściwych (czyli różnych od ) liczby jest równa .
Przykład: Liczby 48, 75 są zaręczone.
Zadanie: Napisać funkcję, która sprawdza czy dwie podane liczby są zaręczone.
Dwie podstawowe pętle to
for zmienna in lista :
terść
oraz
while warunek :
treść
Zadanie: Zaimplementować algorytm Euklidesa z użyciem pętli.
Zadanie: Napisać funkcję, która przyjmuje dwa argumenty: listę oraz liczbę , a w wyniku zwraca dwie listy: zlożoną z elementów -a mniejszych od oraz większych lub równych .
Algorytm "Sito Eratotenesa" wyznacza liczby pierwsze z zakresu na następującej zasadzie:
- Tworzona jest lista wszystkich liczb naturalnych od do ;
- pierwszy element listy jest dołączany do listy liczb pierwszych;
- z listy usuwane są wszystkie wielokrotności tego elementu;
- jeżeli lista wciąż zawiera jakieś elementy, to powtarzamy kroki 2-4.
Zadanie: Zaimplementować powyższy algorytm
Jeżeli deklarując argument funkcji, napiszemy argument = wartość, to wywołując tę funkcją można ten argument pominąć i otrzyma on wtedy podaną wartść domyślną. Jeżeli natomiast chcemy, aby ten argument posiadał inną wartość, to wystarczy ją podać przy wywoływaniu funkcji, tak jak dla każdego innego argumentu. Argumenty o ustalonej wartości domyślnej muszą być podawane na końcu listy argumentów.
Zadanie: Napisać funkcję, która scala z zachowaniem porządku dwie posortowane (w porządku rosnącym) listy, przekazane jako argumenty.
Zadanie: Zaimplementować funkcję sortowania listy algorytmem sortowania przez scalanie (ang. merge sort, zob. np. Wikipedia).
Wskazówka: Wykorzystać funkcję z poprzedniego zadania.
Zadanie: Zaimplementować funkcję sortowania listy algorytmem quick sort (zob. np. Wikipedia).
Zadanie: Utworzyć trójkąt Pascala o wysokości .
Zadanie: Zaimplementować funkcję dwuargumentową intperm( n, sigma ), która permutuje za pomocą permutacji dzielniki pierwsze liczby . Przykładowo, dla pary argumentów oraz , funkcja winna zwracać w wyniku liczbę
Zadanie: Napisać funkcję sprawdzającą czy podane słowo jest palindromem.
Zadanie: Napisać funkcję sprawdzającą czy dwa podane teksty są anagramami.
Zadanie: Napisać funkcję wyznaczającą wszystkie permutacje liter słowa podanego jako argument.
Zadanie: Napisać funkcję, która przyjmuje jako argumenty macierz zero-jedynkową oraz pozycję elementu tej macierzy, następnie wypełnia jedynkami maksymalny obszar 4-spójny złożony z zer i zawierający wskazany element.
Wskazówka: Obszar 4-spójny to taki obszar jaki się odsłania w windowsowym saperze po kliknięciu.
Zadanie (*): W opowiadaniu Artura Clarke'a ,,Dziewięć miliardów imion Boga'' z roku 1955 specjalnie przystosowany komputer miał za zadanie wygenerować wszystkie słowa złożone z nie wiecej niż dziewięciu liter z wyłączeniem słów zawierających trzy (lub więcej) kolejne takie same litery. Słowa te miały jakoby zawierać wszystkie prawdziwe imiona Boga. W opowiadaniu zatrudniony do tego celu komputer wykonał pracę w ciągu trzech miesięcy.
Zrealizować to zadanie z użyciem programu Sage - w zależności od ilości dostępnej w komputerze pamięci, można zmniejszyć długość słów (np. do 5-6 liter).
Uwaga: W opowiadaniu wypisanie wszystkich imion Boga okazało się być celem istnienia wszechświata. Zakończenie działania programu spowodowało koniec świata. Wykonanie zatem zadania, dla pełnej długości słów, wyłącznie na własną odpowiedzialność studenta.
Zadania dodatkowe: elementy analizy matematycznej I
Funkcje
Funkcję w sensi matematycznym (nie mylić z funkcją w sensie informatycznym we wcześniejszej części zestawu!) deklarujemy nazwa( argumenty ) = wyrażenia.
Zadanie: Zdefiniować funkcje , . Doprowadzić do najprostszej postaci.
Zadanie: Zdefiniować funkcję .
Wykresy
Polecenie plot( wyrażenia, (zmienna, początek zakresu, koniec zakresu) ) służy do rysowania wykresu.
Zadanie: Narysować wykres funkcji na przedziale .
Do rysowania krzywych parametrycznych służy funkcja parametric_plot a do rysowania krzywych w postaci uwikłanej implicit_plot
Zadanie: Narysować wykres krzywej parametrycznej zadanej wzorem dla .
Zadanie: Narysować wykres krzywej parametrycznej zadanej wzorem .
Zadanie: Narysować zbiór punktów spełniających warunek dla .
Wykresy trójwymiarowe tworzy się podobnymi komendami jak wykresy dwuwymiarowe, tele że z końcówką `3d': plot3d, parametric_plot3d, implicit_plot3d
Zadanie: Narysować wykres funkcji w kwadracie .
Elementy rachunku różniczkowego/całkowego
Granice ciągów i funkcji
Zadanie: Zdefiniować ciąg . Sprawdzić w helpie składnię funkcji lim. Obliczyć granicę
Sumę szeregu (skończonego lub nie) oblicza się funkcją sum — sprawdzić składnię w pomocy. (Uwaga. Nie mylić sumy szeregu z sumą listy! Obie funkcje mają tę samą nazwę, lecz różne składnie!)
Zadanie: Obliczyć sumy: Drugi z wyników przekształcić następnie na przybliżoną wartość numeryczną.
Zadanie: Obliczyć następujące granice:
Zadanie: Obliczyć następujące granice funkcji:
Pochodna
Pochodną oblicza się funkcją diff.
Zadanie: Obliczyć pochodną z funkcji
Zadanie: Obliczyć następujące pochodne:
Całka
Całkę oblicza się funkcją integrate.
Zadanie: Sprawdzić w helpie składnię funkcji integrate. Policzyć całkę Narysować wykres części rzeczywistej obliczonej całki na przedziale .
Zadanie: Niech funkcja będzie dana wzorem Narysować wykres funkcji na przedziale .