Materiały dodatkowe
Transkrypt
Materiały dodatkowe
Materiały dodatkowe Prowadzący: Łukasz Dunaj, strona kółka: atinea.pl/kolko Pętla rep Jeśli z góry wiemy ile razy ma się wykonać pętla, to zamiast używać kontrukcji while lub for możemy użyć pętli rep. Najlepiej zobrazować ją za pomocą poniższego programu, który wczytuje liczbę n, a następnie wypisuje liczby od 1 do n. use console; def test::main() { var n = console::readln(); rep var i (n) { console::print(i + 1); console::println(); } } Jak widać skłania pętli rep jest bardzo prosta: po słowie kluczowym rep tworzymy zmienną, która będzie tzw. licznikiem pętli – jej wartość będzie przebiegała od 0 do n-1 (to jest bardzo ważne!). W nawiasach okrągłych podajemy, ile razy ma się wykonać pętla – w naszym przypadku jest to n. Ciało pętli piszemy podobnie jak w innych rodzajach pętli; możemy tam korzystać z licznika pętli (powyżej jest to i). Ćwiczenie Napisz program wykorzysując pętlę rep, który wczyta liczbę n, a następnie wczyta n liczb i po każdej wczytanej liczbie wypisze ją zwiększoną o jej numer w kolejności wczytywania, np. Podaj Podaj 8 Podaj 4 Podaj 8 Podaj 13 Podaj 6 n: 5 liczbę: 7 liczbę: 2 liczbę: 5 liczbę: 9 liczbę: 1 Funkcje Funkcja jest to fragment programu, który został wydzielony, nadano mu nazwę i który możemy wykonać poprzez podanie jego nazwy oraz ewentualnych argumentów. Dzięki funkcjom można pisać kod lepszy, czytelniejszy i przede wszystkim łatwiejszy w utrzymaniu. Funkcja składa się ze słowa kluczowego def, po którym następuje nazwa funkcji i jej argumenty podane po przecinkach w nawiasie okrągłym. Aby wykonać funkcję należy napisać jej nazwę oraz ewentualne argumenty. Każda funkcja po wykonaniu swojego ciała może "komunikować" się z miejscem programu, gdzie została wywołana poprzez zwrócenie wartości – służy do tego słowo kluczowe return. Przykład wyraża więcej niż tysiąc słów, zatem poniższy kod obrazuje program z wydzieloną funkcją sprawdzającą, czy słowo podane jako argument zawiera literę 'b' i zwracającą odpowiednio 'Tak' lub 'Nie'. use console; use string; def czy_zawiera_b(argument) { rep var i (string::length(argument)) { if (string::get_char(argument, i) eq 'b') { return 'Tak'; } } return 'Nie'; } def test::main() { var slowo = console::readln(); var wynik = czy_zawiera_b(slowo); console::print(wynik); } Ćwiczenie Napisz program wykorzystując funkcje, który wczyta liczbę n, a następnie wczyta n liczb i po każdej wczytanej liczbie wypisze ile zawiera ona w swoim zapisie dziesiętnym cyfr 4 lub 2, np Podaj Podaj 2 Podaj 0 Podaj 1 Podaj 4 Podaj 0 Podaj 8 n: 6 liczbę: 42 liczbę: 155687 liczbę: 8754 liczbę: 25548642 liczbę: 9876531 liczbę: 44424222 Instrukcje break i continue break; służy do zakończenia pętli wcześniej niż wskazywałby na to warunek (wykonanie tej instrukcji natychmiastowo przerywa wykonywanie pętli – "wyskakuje" z niej) continue; przerywa wykonanie obecnego przebiegu pętli i próbuje wykonać następną iterację (instrukcje w pętli po continue są ignorowane, a program wraca na początek pętli) Przykład 1: Program, który wczytuje liczby od użytkownika, dopóki nie poda on liczby 42. use console; def test::main() { while (true) { var x = console::readln(); if (x == 42) { break; } } console::print('Wpisałeś 42!'); } Przykład 2: Program, który wypisze liczby niepodzielne przez 4 ani 3 od 1 do wczytanej liczby. use console; def test::main() { var n = console::readln(); for(var i = 1; i <= n; ++i) { if (i % 3 == 0 || i % 4 == 0) { continue; } console::print(i); console::println(); } }