Sage Zmienne. Technologia informacyjna. icse.us.edu.pl. 3 października Wróćmy na chwilę do zadania z podrzucaniem piłki w górę.

Podobne dokumenty
1 Podstawy c++ w pigułce.

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Algorytmy i struktury danych

Oczywiście plik musi mieć rozszerzenie *.php

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

4. Funkcje. Przykłady

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy Programowania Podstawowa składnia języka C++

Język programowania zbiór reguł określających, które ciągi symboli tworzą program komputerowy oraz jakie obliczenia opisuje ten program.

1 Podstawy c++ w pigułce.

Naukę zaczynamy od poznania interpretera. Interpreter uruchamiamy z konsoli poleceniem

Język skryptowy: Laboratorium 1. Wprowadzenie do języka Python

Przegląd języka Python. Łukasz Anwajler

Programowanie w języku Python. Grażyna Koba

Podstawy programowania w Pythonie

Spis treści. Funkcje. 1 Funkcje 1.1 Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie Zadanie 7

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny Politechnika Śląska

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

1. Wypisywanie danych

JAVAScript w dokumentach HTML (1) JavaScript jest to interpretowany, zorientowany obiektowo, skryptowy język programowania.

Python dla początkujących. Małgorzata Niewiem AGH, GGiOŚ, Katedra Geoinformatyki i Informatyki Stosowanej SATIM Satelitarny Monitoring

Wprowadzenie do języka Java

JAVAScript w dokumentach HTML (1)

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Funkcje są prawdopodobnie najważniejszą częścią każdego poważnego programu (w każdym języku programowania).

Podstawowe wyrażenia matematyczne

2 Przygotował: mgr inż. Maciej Lasota

Programowanie obiektowe

Python. Skąd taka nazwa? Kurs systemu UNIX 1

MATERIAŁY DO ZAJĘĆ II

Wstęp do programowania

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

2. Zmienne i stałe. Przykłady Napisz program, który wypisze na ekran wynik dzielenia 281 i 117 w postaci liczby mieszanej (tj. 2 47/117).

Cw.12 JAVAScript w dokumentach HTML

Wskaźniki a tablice Wskaźniki i tablice są ze sobą w języku C++ ściśle związane. Aby się o tym przekonać wykonajmy cwiczenie.

Podstawy i języki programowania

Programowanie robota mobilnego E-puck w języku Python

Microsoft IT Academy kurs programowania

Tablice (jedno i wielowymiarowe), łańcuchy znaków

Wykresy i interfejsy użytkownika

Podstawy. Jan Koprowski Politechnika Gdańska, FTiMS Informatyka Stosowana

C++ wprowadzanie zmiennych

Umieszczanie kodu. kod skryptu

Wstęp do programowania

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Wstęp do Informatyki i Programowania (kierunek matematyka stosowana)

Python wstęp do programowania dla użytkowników WCSS

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Podstawy programowania w Pythonie

Podstawy programowania skrót z wykładów:

Języki programowania wysokiego poziomu. PHP cz.2.

Programowanie Komputerów

Języki programowania obiektowego Nieobiektowe elementy języka C++

Struktury, unie, formatowanie, wskaźniki

Nazwa implementacji: Nauka języka Python wyrażenia warunkowe. Autor: Piotr Fiorek. Opis implementacji: Poznanie wyrażeń warunkowych if elif - else.

Python. Wprowadzenie. Jolanta Bachan

Java Podstawy. Michał Bereta

Struktura pliku projektu Console Application

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Wiadomości wstępne Środowisko programistyczne Najważniejsze różnice C/C++ vs Java

Kurs rozszerzony języka Python

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Swift (pol. jerzyk) nowy język programowania zaprezentowany latem 2014 r. (prace od 2010 r.)

2. Łańcuchy tekstowe w PHP

Typy danych, cd. Łańcuchy znaków

Powtórka algorytmów. Wprowadzenie do języka Java.

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Podstawy programowania w Pythonie

Bloki anonimowe w PL/SQL

Podstawy programowania

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Języki C i C++ Wykład: 2. Wstęp Instrukcje sterujące. dr Artur Bartoszewski - Języki C i C++, sem. 1I- WYKŁAD

Programowanie - wykład 4

Obliczenia Symboliczne

Pascal - wprowadzenie

Warsztaty dla nauczycieli

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Informatyka- wykład. Podstawy programowania w Pythonie. dr Marcin Ziółkowski

Podstawy programowania w języku C i C++

Wykład 2 Składnia języka C# (cz. 1)

Podstawowe typy zmiennych

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Podstawowe części projektu w Javie

Podstawy Programowania C++

3. Instrukcje warunkowe

Obliczenia iteracyjne

Wprowadzania liczb. Aby uniknąć wprowadzania ułamka jako daty, należy poprzedzać ułamki cyfrą 0 (zero); np.: wpisać 0 1/2

C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów. C++ - przeciążanie operatorów

Wstęp do programowania. Różne różności

Przykład 1 -->s="hello World!" s = Hello World! -->disp(s) Hello World!

WYRAŻENIA ALGEBRAICZNE

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

1. Wprowadzenie do języka PHP

Powtórka algorytmów. Wprowadzenie do języka Java.

Transkrypt:

Sage Zmienne Technologia informacyjna icse.us.edu.pl 3 października 2011 1 Używanie zmiennych Wróćmy na chwilę do zadania z podrzucaniem piłki w górę. Zadanie: Ruch pionowy w polu grawitacyjnym Ziemi czas: 0 min. W górę rzucono piłkę. Zaniedbując siły oporu, oblicz na jaką wysokość wzniesie się piłka po 0.54 sekundy, jeżeli wartość początkowa prędkości wynosiła 3.44m/s. Rozwiązaliśmy ten problem już dwukrotnie - raz bez zmiennych, a drugi raz z użyciem zmiennymi. Zatrzymajmy się teraz na tym samym problemie, ale skupmy się nie na rozwiązaniu, ale na metodyce wykorzystania zmiennych. Pamiętamy, że rozwiązanie dane jest wzorem możemy zatem napisać w Sage a = 9.81 b = 0.54 c = 3.44 d = c * b - 0.5 * a * b ^ 2 d h(t) = v 0 t 1 2 gt2 (1) co zwróci nam oczywiście poprawne rozwiązanie. Jeżeli teraz ktoś zapyta się nas a jak wysoko owa piłka poleci po 0.1 sekundy?. Mając dostępny wzór (1) bez problemu zidentyfikujemy zmienne jako: v 0 = c, t = b i g = a. Gorzej, jeżeli wzoru nie widzimy. Może pamiętacie w jaki sposób podano rozwiązanie za pomocą zmiennych na poprzedniej lekcji? Wybór nazw zmiennych nie był przypadkowy dobrano je tak, aby jak najbardziej przypominały równanie (1). 1

g = 9.81 t = 0.54 v0 = 3.44 h = v0 * t - 0.5 * g * t ^ 2 W przypadku dość intuicyjnego (dla fizyka) nazewnictwa zmiennych w równaniu (1), zrozumienie powyższego kodu nie powinno dla nikogo (z nas) stanowić problemu. Pamiętajcie: możemy jednak zapisać powyższe równanie w dowolny sposób niezrozumiale, wykorzystując pierwsze lepsze nazwy dla zmiennych bardziej zrozumiale, choć nieco hermetycznie, wykorzystując naturalne nazewnictwo zmiennych np: z podręcznika do fizyki stosując pełne nazwy, co daje nam pełne informacje o problemie (zazwyczaj) przyspieszenie_ziemskie = 9.81 czas = 0.54 predkosc_poczatkowa = 3.44 wysokosc_pilki = predkosc_poczatkowa * czas - \ 0.5 * przyspieszenie_ziemskie * czas ^ 2 Takie podejście do użycia zmiennych ma swoje plusy i minusy. Plusem jest czytelność rozwiązania. Minusem długość kodu i czas potrzebny na wprowadzenie takiej ilości tekstu (z czasem ten problem znika). Plusem łatwość modyfikacji i rozszerzania problemu (możemy dodać np: zmienną przyspieszenie_ksiezyc = 1.622 i później łatwo i czytelnie wykorzystać ją w kodzie). Minusem (ale tylko dla alfabetów niespójnych z ASCII) jest konieczność pisania po polskiemu. Sami zdecydujecie w toku nauki programowania jaki styl kodu najbardziej Wam odpowiada - bardziej hermetyczny i szybszy kod wykorzystujący typowe stałe matematyczno/fizyczne oraz intuicję programisty, czy sposób wykorzystujący pełne nazwy. Często stosuje się też swego rodzaju mieszaninę ich obu, ale nigdy nie powinniśmy programować używając pierwszych z brzegu nazw zmiennych. Uwaga: Na tym kursie używanie przypadkowych nazw zmiennych będzie skutkowało obniżeniem oceny. Istnieją pewne reguły, do których można i powinno się stosować. Część z nich powoduje po prostu błędy, inne są wynikiem pewnych przyjętych standardów programowania. W Sage (i w języku Python) nie musimy deklarować typu zmiennej, typ jest ściśle związany z wartością zmiennej, nie z jej identyfikatorem. Identyfikator (nazwa) zmiennej, może się składać z dowolnych liter, znaku podkreślenia oraz cyfr. Zwykłe zmienne powinny się rozpoczynać od litery, zmienne zaczynające lub kończące się od znaku podkreślenia mają zwykle specjalne znaczenie, zatem lepiej ich unikać, choć znak podkreślenia wewnątrz zmiennej jest dozwolony. Nazwy zmiennych nie mogą zaczynać się od cyfry. Należy zwrócić uwagę na fakt, że Sage (Python) rozróżnia wielkość liter. 2

x = 0 X = 0 zmienna = 0 # zalecane dla nazw modulów ZMIENNA = 0 pewna_zmienna = 0 # zalecane dla nazw funkcji i metod PEWNA_ZMIENNA = 0 # zalecane dla stalych pewnazmienna = 0 PewnaZmienna = 0 # zalecane dla nazw klas Do przypisania wartości do zmiennej służy operator przypisania (=). Powyżej do wszystkich zmiennych przypisaliśmy wartość 0. Oczywiście musimy być ostrożni, nie powinniśmy przypisywać nowych wartości nazwom już zdefiniowanym, może to prowadzić do nieoczekiwanych rezultatów: sin(pi) teraz przypiszemy sobie sin = Ala ma kota sin(pi) W ten sposób uszkodziliśmy funkcję sinus, przypisując pod nazwę sin napis. Pakiet Sage dostarcza funkcję restore, która pozwala na przywrócenie domyślnej definicji danej nazwy: restore( sin ) sin(pi) Jak widzieliśmy już wcześniej, aby podzielić długą linię, należy użyć znaku \ (wsteczny ukośnik, lewy ukośnik). zmienna = \ 0 należy jednak pamiętać, żeby po znaku ukośnika nie wpisywać żadnych znaków (w tym znaków białych). 1.1 Nazwy zarezerwowane W Sage jako pewnego rodzaju potomku języka Python występują nazwy, których nie możemy użyć jako nazw zmiennych, tzw. nazwy zarezerwowane. Oto ich lista: and assert break class continue def del elif else except exec finally for from global if import in is lambda not or pass print raise return try while 3

Nie powinno się również używać poniższych nazw, aczkolwiek nie są to słowa zarezerwowane. Użycie ich spowoduje jednak konflikt z dość szeroko używanymi funkcjami Python-a. Data Float Int Numeric Oxphys array close float int input open range type write zeros Powinno się również unikać stosowania nazw popularnych funkcji matematycznych. acos asin atan cos e exp fabs floor log log10 pi sin sqrt tan Uwaga: Jeżeli jednak zdarzy się nam użyć którejś z powyższych nazw (oprócz tych zastrzeżonych), zawsze można odzyskać ją funkcją restore(). 2 Komentarze Komentarze w języku Python a więc i w Sage zaczynają się od znaku #. Wszystko co znajduje się za tym znakiem będzie pomijane przez interpreter. Komentarze stosuje się w kilku celach. Można nimi zablokować na jakiś czas kawałek kodu stwarzający problemy. Zwykle jednak służy on do bezpośredniego opisu samego kodu. Przykładowo ### # ten program oblicza wysokosc na jaka doleci # pilka wyrzucona w gore w polu ziemskim ### g = 9.81 # przyspieszenie grawitacyjne Ziemi t = 0.54 # czas koncowy v0 = 3.44 # predkosc poczatkowa h = v0 * t - 0.5 * g * t^2 # wysokosc po czasie t W ten sposób praktycznie każdy program przez nas napisany będzie czytelny. Jest jeszcze jedna możliwość dodawanie komentarza do skryptów/programów Sage/Python - używanie ciągów znakowych """to jest komentarz, ktory moze sie ciagnac wiele linii""" O ciągach znakowych poniżej. 4

3 Ciągi znaków Ciągi znaków w Sage traktowane są jako kolejny typ danych. Jedyną różnicą jest to, że należy podawać je używając cudzysłowów " lub apostrofów. "Ala ma kota" W przeciwnym wypadku Sage potraktuje nasz ciąg jako funkcję i będzie chciał ją wywołać. W wyniku dostaniemy Syntax Error. Ala ma kota Ciągi znaków możemy dowolnie przypisywać do zmiennych k = "www.onet.pl" znaki = "Ala ma kota" Istnieje specjalna konstrukcja ciągu znaków zaczynająca i kończąca się trzema cudzysłowami """. Jest to ciąg znaków charakterystyczny dla języka Python i może on ciągnąć się przez wiele linii. Odstępy użyte w środku zostaną zachowane. Ponadto możemy w takim środowisku używać pojedynczych apostrofów i cudzysłowów w zasadzie dowolnie. Przed literałem łańcuchowym takim jak powyżej "ala ma kota" możemy użyć prefiksów r,u,b. Oznaczają one odpowiednio (pod warunkiem, że jako baza Sage mamy język Python w wersji 2.*) r (row, raw string literal) w tak oznaczonym literale łańcuchowym wszystkie znaki traktowane będą dosłownie, np. ukośnik wsteczny traktowany będzie jak zwykły ukośnik wsteczny np: r"ala ma kota", r \sin to komenda \LaTeX{}a u (unicode) napis w Unikodzie np: u"ala ma kota", u zażółć gęślą jaźń b napis w ASCII np: b"ala ma kota", b A quick brown fox jumps over the lazy dog Oczywiście jest spora różnica pomiędzy 1 i "1" 1 == "1" Ma to związek z typami danych. 4 Typy danych Na chwilę skupimy się na języku Python. Język ten, jak wiemy, stanowi bazę dla Sage-a, więc wszystko co powiemy o nim jest prawdziwe również w przypadku Sage. 5

4.1 Typy danych w Pythonie W Pythonie wartości, a nie zmienne, posiadają typ tak więc Python jest językiem z typami dynamicznymi. Wszystkie wartości przekazywane są przez referencję. W porównaniu z innymi językami z typami dynamicznymi Python sprawdza typy w umiarkowanym stopniu. Dla typów numerycznych zdefiniowana jest automatyczna konwersja, tak więc możliwe jest np. mnożenie liczby zespolonej przez liczbę całkowitą typu long bez rzutowania. Nie ma natomiast automatycznej konwersji pomiędzy napisami i liczbami. Tutaj podamy jedynie podstawowe informacje na temat typów danych. Po nieco obszerniejszą lekturę odsyłamy np. do części Wbudowane typy danych podręcznika Zanurkuj w Pythonie. bool typ logiczny True, False int liczba całkowita 1, 13 float liczba zmiennoprzecinkowa 3.1415 complex liczba zespolona 1 + 3j str napis (niezmienny) To jest napis unicode napis w Unikodzie (niezmienny) u To jest napis bytes napis w ASCII b To jest napis ASCII list lista (zmienna zawartość i długość) [2, "Ala", -12.32] tuple krotka (niezmienna) (2, "Ala", -12.32) set zbiór (zmienny) set([2, "Ala", -12.32]) frozenset zbiór (niezmienny) frozenset([2, "Ala", -12.32]) dict słownik (tablica asocjacyjna) (zmienny) {1: "jeden", "dwa": 2} type(none) odpowiednik null None 6

Większość, jeżeli nie wszystkie powyższe typy poznacie w ramach tego kursu. Sage domyślnie posiada jednak swoje własne typy danych, które w większości odpowiadają typom Pythona, ale zbudowane są od nowa. Jako, że Sage pomyślany został jako program przede wszystkim do obliczeń symbolicznych czy ich wizualizacji, typy wbudowane w Sage skonstruowane są podobnie jak w matematyce. Typy liczbowe budowane są w oparciu odpowiednie pierścienie (liczb całkowitych, wymiernych, itp.). Więcej na temat pierścieni znajdziesz w Samouczku lub w podręczniku Konstrukcje Sage. Aby dowiedzieć się, jakiego typu jest dana zmienna należy użyć funkcji type(). Np: z = 1 type(z) 4.2 Zadania Zadanie: Określ jaki typ mają poniższe zmienne czas: 5 min. i = 1 k = (1,2,3) zmienna_z_zadania = ("Ala", 21, 4.5) ocena = 3.5 imie = "Feliks" Zadanie: Konwersja ze stopni Celsiusa do Fahrenheita czas: 5 min. Napisz program konwertujący temperaturę mierzoną w stopniach Celsiusa do stopni Fahrenheita według równania F = 9 5 C + 32 Użyj identycznych nazw zmiennych. Następnie napisz program konwertujący temperaturę w drugą stronę. Zadanie: Oblicz z wykorzystaniem tych samych zmiennych czas: 10 min. f = (x + y0.4) 0.25x 0.8 Area = πr 2, gdzie r = π 1 3 1 (2) 0 = cosh 2 (x) + sinh 2 (x), gdzie x = 32π (3) ( x ) + log + 10 x+y2, gdzie x = sinh(1), y = tgh(20) (4) y Zadanie: Rzut ukośny czas: 20 min. Jeżeli w polu grawitacyjnym wyrzucimy piłkę z wysokości h 0 i z prędkością początkową v 0 zorientowaną pod kątem α w stosunku do poziomu otrzymujemy zagadnienie rzutu ukośnego. Rozwiązywać je będziecie analitycznie na zajęciach z mechaniki. Równanie toru takiego ruchu we współrzędnych kartezjańskich (x,y) dane jest wzorem: g y = x tg(α) 2v0 2 cos2 (α) x2 7

Napisz program znajdujący wysokość piłki y dla zadanych wartości przyspieszenia grawitacyjnego g, kąta α, prędkości początkowej v 0 i odległości x. Postaraj się napisać jak najbardziej czytelny kod. 5 Formatowanie tekstu Polecenie (które może być używane jak funkcja) print służy do wyświetlania tekstu. Tekstem nie musi być ciąg znaków (literał łańcuchowy). Może nim być zmienna bądź literał dowolnego typu. print 4 print "cztery" cztery = 4 print cztery cztery = 4.0 print cztery print(cztery) Polecenie print łamie końcową linię przechodząc do nowego wiersza, chyba, że na końcu polecenia umieścimy przecinek print "pi =", print 3.14154 Oczywiście przecinkiem możemy również oddzielać kolejne obiekty print "liczba pi =", 3.1415, "a jej kwadrat to", 3.1415 * 3.1415 To samo możemy osiągnąć stosując formatowanie tekstu w poleceniu print. print "liczba pi = %f a jej kwadrat to %f" % (3.1415, 3.1415 * 3.1415) Po kolei. Polecenie print drukuje na ekran ciąg znaków - wszystko, co zawarte jest pomiędzy cudzysłowami (lub apostrofami). Pomiędzy nimi występują specjalne znaki zaczynające się od znaku %. W ich miejsce podstawiane są odpowiednio interpretowane wartości zmiennych (bądź literały) występujące za identycznym znakiem znajdującym się za ciągiem zawartym w cudzysłowach. Pierwsza wartość z nawiasu podstawiana jest do w miejsce pierwszego wystąpienia %f. Analogicznie druga wartość podstawiana jest w miejsce drugiego wystąpienia %f. Znak f występujący po procencie wymusza interpretację argumentu jako liczby zmiennoprzecinkowej (float). Inne możliwe formatowania print %s ciąg znaków %d liczba całkowita %0Nd liczba całkowita poprzedzona zerami w taki sposób, że otrzymujemy N cyfr na wyjściu (pod warunkiem, że N liczby cyfr danej liczby) %f liczba zmiennoprzecinkowa 8

%e notacja naukowa (e przy eksponencie) %E notacja naukowa (E przy eksponencie) %g,%g notacja dziesiątkowa %Xz formatowanie liczby z do prawej dla pola o szerokości X print "%31f" % 0.0123412 %-Xz formatowanie liczby z do lewej dla pola o szerokości X print "%-31f" % 0.0123412 %.Yz formatowanie liczby z z Y miejscami po przecinku %X.Yz formatowanie liczby z z Y miejscami po przecinku w polu o szerokości X %% znak procenta 5.1 Zadania Zadanie: Rzut ukośny czas: 10 min. Przepisz kod tak, aby zwracał m/w taką informację Na odległości 2.963 m ciało rzucone z wysokości 12.5 m z prędkością początkową 3 m/s pod kątem 0.12 rad znajduje się na wysokości 8.0 m w polu grawitacyjnym Ziemi. Zadanie: Słownik przyspieszeń czas: 10 min. Zbuduj słownik zawierający jako klucz nazwę ciała niebieskiego a jako wartość wartość przyspieszenia na nim podają w m/s. Zadanie: Przyrost pieniędzy w banku czas: 15 min. Niech p oznacza stopę procentową banku wyrażoną w procentach na rok. Początkowa wartość odłożonej gotówki w tym banku urośnie zgodnie ze wzorem ( W = A 1 + p ) n (5) 100 po n latach. Oblicz do jakiej kwoty wzrośnie 1. 1000 Euro po 3 latach dla stopy 5 procentowej 2. 23513 zł po 5 latach dla stopy 3,54% 3. 112,12 miliona Rubli po 1 roku dla stopy 7.14% Powyższe wielkości sformatuj odpowiednio dla wszystkich trzech przypadków tak, by inwestor otrzymał pełną, czytelną informację. 9