2.3. Automat biletowy

Scenariusz projektu

Kolejnym twoim zadaniem będzie zaprojektowanie automatu sprzedającego bilety, np. komunikacji miejskiej. Zwykle takie automaty umożliwiają wybór rodzaju biletu, liczbę kupowanych biletów, formę zapłaty (kartą płatniczą lub gotówką), a w przypadku płacenia gotówką wydają resztę. Podczas kupna biletu automat przeprowadza kupującego przez kolejne kroki, od wyboru biletów po płatność.

Zadanie 2.3.1.

Odwiedź stronę internetową przedsiębiorstwa komunikacji miejskiej twojego miasta lub (jeśli mieszkasz w mniejszej miejscowości) najbliższego większego miasta z taką komunikacją. Zapoznaj się z obowiązującym systemem biletowym. Wybierz co najmniej dwa rodzaje biletów, które wykorzystasz w swojej aplikacji. Jeśli są na stronie zdjęcia – wzorce biletów, pobierz je.
Na poniższych obrazkach znajdziesz wzorce kilku przykładowych biletów komunikacji miejskiej w Warszawie pobrane ze strony http://www.ztm.waw.pl według stanu na wiosnę 2015 roku.

Zadanie 2.3.2.

Zaplanuj, jakie działania będą wykonywane na kolejnych ekranach automatu (np. wybór rodzaju biletu – spośród przykładowych biletów można wybierać ze względu na strefę lub pomiędzy biletami normalnymi i ulgowymi, wybór liczby kupowanych biletów, itd.). Załóż, że płatność będzie dokonywana tylko gotówką i automat będzie wydawał resztę.
Przykładowy podział:
  1. 1.
    Wybór biletu pomiędzy ulgowym i normalnym.
  2. 2.
    Wybór rodzaju biletu (spośród przykładowych biletów są trzy rodzaje: 20 minutowy, 75 minutowy i 90 minutowy).
  3. 3.
    Wybór liczby biletów.
  4. 4.
    Prośba o zapłatę z podaniem kwoty oraz oczekiwanie na zapłatę.
  5. 5.
    Ewentualne wydanie reszty i zakończenie zakupu.

Zadanie 2.3.3.

Zaprojektuj wygląd kolejnych ekranów automatu. Zastanów się, które elementy będą duszkami, a które tylko rysunkami kolejnych teł.
Elementy, w które będzie można kliknąć i będą powodowały określony wybór, powinny być duszkami. Pozostałe elementy graficzne mogą być narysowane jako tło kolejnych ekranów automatu biletowego.
Poniżej przykładowy wygląd kolejnych ekranów, zaprojektowany zgodnie z odpowiedzią do zadania 2. Najlepiej, jak zaprojektujesz własne ekrany zgodnie z twoją propozycją rozwiązania zadania 2.
Ekran 1: Wybór pomiędzy biletem ulgowym i normalnym. Przyciski Ulgowy i Normalny będą duszkami.
Ekran 2: Wybór rodzaju biletu spośród ulgowych lub normalnych (zgodnie z wcześniejszym wyborem). Przykładowy ekran po wyborze biletu ulgowego. Obrazki biletów będą duszkami.
Ekran 3: Wybór liczby biletów. Przykładowy ekran po wyborze biletu ulgowego 20 minutowego. Przycisk Kupuję oraz przyciski strzałek do zmiany liczby biletów powinny być duszkami. W obrazek biletu nie można już klikać, więc może to być element tła – np. przystemplowany wizerunek duszka. Ponieważ będzie można zmieniać liczbę kupowanych biletów, wygodnie będzie, żeby ich liczba była duszkiem.
Ekran 4: Obliczenie kwoty do zapłaty oraz oczekiwanie na zapłatę. Przykładowy ekran po wybraniu 3 biletów ulgowych 20 minutowych.
Ekran 5: Ewentualne wydanie reszty. Przykładowy ekran po wprowadzeniu kwoty 6 zł (przy zakupie 3 biletów ulgowych 20 minutowych). Zostanie wydane 90 gr reszty, np. moneta 50 gr i dwie monety 20 gr. Obrazy monet wygodnie będzie przedstawić jako duszki, można je znaleźć na stronie Narodowego Banku Polskiego http://www.nbp.pl.
W przykładowej aplikacji można maksymalnie wybrać 9 biletów, reszta wydawana jest zawsze monetami. Jej działanie można obejrzeć na poniższym filmie.
Dalszych kilka podrozdziałów opisuje kolejne kroki tworzenia i oprogramowania interfejsu przykładowej aplikacji według przedstawionego powyżej scenariusza. Pamiętaj, że tworzysz aplikację podobną, ale według własnego scenariusza, więc twoje skrypty sterujące duszkami i ekranami automatu będą prawdopodobnie różnić się od przykładowych.
Zwróć szczególną uwagę na kilka ostatnich podrozdziałów, w których duszka – kotka (lub inną postać zaproponowaną przez ciebie) czeka ważne zadanie. Oblicza należność do zapłaty oraz kwotę reszty. W tym celu musi wyznaczyć liczbę monet poszczególnych nominałów jako resztę, którą należy wydać. Algorytm wyznaczenia reszty w twojej aplikacji będzie prawdopodobnie analogiczny jak w przykładowej.

Przygotowujemy tła i duszki

Zadanie 2.3.4.

Przygotuj wszystkie potrzebne duszki oraz tła do twojego projektu. Część duszków znajdziesz w galerii Scratcha, inne pobierz z internetu (pamiętaj o przestrzeganiu praw autorskich) lub zaprojektuj samodzielnie w edytorze graficznym. Pamiętaj, że duszek może mieć kilka kostiumów, które mogą być wykorzystywane nie tylko do animacji.
W przykładowej aplikacji występują następujące duszki:
  1. 1.
    Przyciski. Łącznie są trzy duszki-przyciski Ulgowy, Normalny i Kupuję. Zostały zaprojektowane w edytorze graficznym.
  2. 2.
    Bilety. Łącznie jest sześć biletów. Ponieważ równocześnie są wyświetlane maksymalnie trzy bilety (same ulgowe lub same normalne), reprezentowane są przez trzy duszki, a każdy z nich posiada dwa kostiumy (normalny i ulgowy). Wzorce biletów zostały pobrane ze strony http://www.ztm.waw.pl.
  3. 3.
    Strzałki do wyboru liczby kupowanych biletów. Dwa duszki z galerii Scratcha.
  4. 4.
    Cyfry podające liczbę kupowanych biletów. Duszek z dziewięcioma kostiumami z galerii Scratcha kolejno reprezentującymi cyfry od 1 do 9.
  5. 5.
    Standardowy duszek kotek podający kwotę do zapłaty i oczekujący na zapłatę.
  6. 6.
    Monety. Jeden duszek z kolejnymi kostiumami reprezentującymi monety 5 zł, 2 zł, 1zł, 50 gr, 20 gr, 10 gr. Wzorce monet zostały pobrane ze strony http://www.nbp.pl.
Łącznie więc w przykładowym projekcie jest 11 duszków. Poniżej możesz pobrać duszki (przyciski, bilety, monety) z przykładowej aplikacji.
Tła sceny są bardzo proste. Trzy tła z napisami „Jaki bilet chcesz kupić?”, „Wybierz rodzaj biletu:”, „Wybierz liczbę biletów:” oraz czwarte puste tło, na którym duszek pobiera opłatę oraz wydaje resztę.
Zapewne w swojej aplikacji zaprojektujesz ciekawsze tła.

Zadanie 2.3.5.

Załaduj do projektu Scratcha przygotowane duszki oraz tła. Ustaw, że domyślnie duszki są niewidoczne. Dla każdego z nich przygotuj także skrypt, uruchamiany po kliknięciu zielonej flagi, ukrywający duszka. Nawet jak domyślnie wszystkie duszki są ukryte, to niektóre mogą być widoczne po poprzednim wykonaniu aplikacji (reszta w postaci monet, niektóre duszki po przerwaniu działania aplikacji przyciskiem stop).

Wybieramy rodzaj biletu

Pierwszy ekran przykładowej aplikacji dokonuje tylko wyboru pomiędzy biletem ulgowym i normalnym. Na scenie widoczne są dwa duszki – przyciski Ulgowy i Normalny. Po kliknięciu w jeden z tych przycisków następuje przejście do następnego ekranu – wyboru rodzaju biletu spośród ulgowych lub normalnych. Powinien w związku z tym zostać nadany komunikat informujący pozostałe duszki o wyborze biletu ulgowego lub normalnego, aby mogły być podjęte następne działania. Jeśli jeszcze nie umiesz korzystać z komunikatów kliknij tutaj.

Zadanie 2.3.6.

Po uruchomieniu aplikacji zieloną flagą powinien być widoczny pierwszy ekran automatu biletowego. Przygotuj odpowiedni skrypt dla sceny wybierający pierwsze tło i czyszczący scenę.

Zadanie 2.3.7.

Zaplanuj i utwórz skrypty dla przycisku Ulgowy. Ten duszek jest widoczny tylko na pierwszym ekranie, więc może mieć stałą pozycję na scenie. Pamiętaj, że ma zostać ukryty nie tylko po kliknięciu w niego, ale także przy wyborze przycisku Normalny.
Przycisk ten znajduje się na pierwszym ekranie (tle), w związku z tym po uruchomieniu aplikacji – kliknięciu w zieloną flagę – powinien zostać pokazany (popraw w związku z tym skrypt uruchamiany po kliknięciu zielonej flagi). Po kliknięciu duszka tło zmienia się na następne i zostaje nadany komunikat o wyborze biletu ulgowego. Ponieważ duszek ma być ukryty także po kliknięciu drugiego przycisku, najlepiej ukryć go, gdy nastąpi zdarzenie zmiany tła.

Zadanie 2.3.8.

Utwórz skrypty dla przycisku Normalny. Będą one analogiczne, jak dla poprzedniego przycisku. Możesz je skopiować przeciągając skrypty i upuszczając na drugim duszki. Pamiętaj o nadaniu innego komunikatu, np. normalny.
Na kolejnym ekranie (po otrzymaniu komunikatu normalny lub ulgowy) jest wyświetlana grupa trzech biletów do wyboru. Każdy z nich ma dwa kostiumy, wybór kostiumu zależy od odebranego komunikatu (normalny lub ulgowy). Wybrany bilet zmienia swoją pozycję na następnym ekranie, więc należy programowo ustawiać jego pozycję. Wygodnie będzie także zapamiętać wybór biletu w zmiennej. Niech wartości od 1 do 3 określają bilety normalne, a wartości od 4 do 6 odpowiadające im bilety ulgowe.

Zadanie 2.3.9.

Utwórz zmienną do pamiętania wybranego biletu, dostępną dla wszystkich duszków. Nazwij ją np. rodzaj.

Zadanie 2.3.10.

Zastanów się, jakie czynności należy przewidzieć dla duszka – biletu. Staraj się tak je zaplanować, aby były uniwersalne niezależnie od rodzaju biletu.
Czynności inicjalizujące:
  • pokazanie duszka,
  • ustawienie pozycji,
  • wybranie kostiumu.

Pokazanie i wybranie kostiumu powinno nastąpić w momencie odebrania komunikatu normalny lub ulgowy. Ustawienie pozycji może nastąpić po kliknięciu w zieloną flagę.

Reakcja na kliknięcie w duszka (wybór biletu):
  • określenie wartości zmiennej rodzaj,
  • zmiana tła na kolejny ekran,
  • ustawienie duszka i przystemplowanie jego obrazu,
  • nadanie komunikatu o wyborze biletu.

Czynności końcowe:
  • po otrzymaniu komunikatu o wyborze biletu ukrycie duszka.

Duszka, w którego kliknięto, można ukryć bezpośrednio przed nadaniem komunikatu o wyborze biletu w poprzednim punkcie. Biletów mamy jednak więcej, one także powinny zostać ukryte.

Zadanie 2.3.11.

Przygotuj skrypty zgodnie z rozwiązaniem poprzedniego zadania.
Skrypty na przykładzie biletu 20 minutowego. Dla innych biletów mogą się różnić pozycją na scenie, wyborem kostiumu i wartością zmiennej rodzaj.
Skrypty inicjalizujące:
Skrypt – wybór biletu:
Skrypt kończący po wyborze rodzaju biletu:

Zadanie 2.3.12.

Skopiuj skrypty dla pozostałych biletów i dokonaj niezbędnych poprawek: przypisania odpowiedniej wartości zmiennej rodzaj, położenia na scenie oraz wyboru kostiumu.

Wybieramy liczbę biletów

Na kolejnym ekranie (po otrzymaniu komunikatu wybrano bilet) określamy liczbę biletów. Na scenie dostępne są duszki – strzałki do zmiany liczby kupowanych biletów, duszek reprezentujący wybraną liczbę biletów oraz przycisk Kupuję.

Zadanie 2.3.13.

Zaplanuj działania dla duszków - strzałek.
  1. 1.
    Po otrzymaniu komunikatu wybrano bilet należy pokazać duszka.
  2. 2.
    Po kliknięciu w duszka należy nadać komunikat więcej lub mniej w zależności od strzałki, aby duszek pokazujący liczbę wybranych biletów mógł zmienić kostium.
  3. 3.
    Po otrzymaniu komunikatu generowanego przez przycisk Kupuję należy ukryć duszka.

Zadanie 2.3.14.

Przygotuj skrypty dla obu strzałek zgodnie z rozwiązaniem poprzedniego zadania.
Skrypty dla strzałki do góry. Dla strzałki do dołu różni się tylko skrypt reagujący na kliknięcie duszka – należy nadać komunikat mniej.

Zadanie 2.3.15.

Zaplanuj działania dla duszka reprezentującego liczbę kupowanych biletów.
  1. 1.
    Po otrzymaniu komunikatu wybrano bilet należy pokazać duszka oraz ustawić pierwszy kostium z cyfrą 1.
  2. 2.
    Po otrzymaniu komunikatu mniej należy ustawić poprzedni kostium (o ile nie był pierwszy).
  3. 3.
    Po otrzymaniu komunikatu więcej należy ustawić następny kostium (o ile nie był ostatni).
  4. 4.
    Po otrzymaniu komunikatu generowanego przez przycisk Kupuję należy ukryć duszka.

Zadanie 2.3.16.

Przygotuj skrypty dla duszka reprezentującego liczbę biletów zgodnie z rozwiązaniem poprzedniego zadania.
Skrypty reagujące na otrzymanie komunikatów wybrano bilet, mniej oraz więcej.

Zadanie 2.3.17.

Zaplanuj działania i przygotuj skrypty dla przycisku Kupuję.
  1. 1.
    Po otrzymaniu komunikatu wybrano bilet należy pokazać duszka.
  2. 2.
    Po kliknięciu duszka należy go ukryć i nadać komunikat kupuję.

Projektujemy struktury danych

Ponieważ automat biletowy ma nie tylko umożliwić wybranie rodzaju biletu, ich liczby, ale także obliczyć wartość kupowanych biletów oraz wydać resztę, potrzebne będą informacje dotyczące cen poszczególnych biletów, nominałów monet, liczby wydawanych poszczególnych monet. Ponieważ w przykładowej aplikacji występuje 6 różnych biletów, mamy także 6 nominałów monet, niewygodne będzie pamiętanie tych informacji w pojedynczych zmiennych liczbowych. Lepiej utworzyć i zapamiętać te informacje na listach. Więcej informacji dotyczących list znajdziesz tutaj.
Ceny biletów lepiej jest pamiętać jako liczby naturalne, a więc wyrażone w groszach. Wynika to z faktu, że liczby całkowite są w komputerze pamiętane dokładnie, a liczby rzeczywiste w przybliżeniu. Łatwiej będzie prowadzić obliczenia. Analogicznie, nominały monet zapamiętamy w tych samych jednostkach, czyli w groszach (np. 1 zł jako 100 groszy). Więcej o reprezentacji liczb całkowitych i rzeczywistych dowiesz się tutaj.

Zadanie 2.3.18.

Utwórz listy do pamiętania cen poszczególnych biletów, nominałów monet oraz liczby wydawanych monet o poszczególnych nominałach.
  • Listę cen biletów zaplanuj tak, aby najpierw były bilety jednego rodzaju, np. normalne, a potem odpowiadające im ulgowe.
  • Listę z nominałami monet przygotuj uporządkowaną malejąco od największego do najmniejszego nominału.
  • Lista z liczbami monet do wydania jako reszta powinna być wypełniona wartościami 0 (nie wiemy jeszcze, czy i jaką resztę trzeba będzie wydać).

Utwórz bloki inicjalizujące listy. Pamiętaj, że możesz mieć inną liczbę biletów i ich rodzajów, zgodnie z twoim projektem.
Zastanów się, na jakie zdarzenie oraz dla jakiego obiektu (którego duszka lub sceny) wywołać bloki. Jeśli chcesz sobie przypomnieć informacje o tworzeniu własnych bloków, kliknij tutaj.
Najwygodniej będzie wywołać bloki inicjalizujące listy po kliknięciu zielonej flagi dla sceny, ponieważ jest jedna, a duszków wiele i każdy z nich ma inne własne skrypty.

Duszek oblicza należność i prosi o zapłatę

Na kolejnym ekranie (po otrzymaniu komunikatu kupuję) należy pokazać duszka, który nas rozliczy. Powinien on najpierw obliczyć wartość kupowanych biletów, następnie poprosić o zapłatę. Wygodnie zapamiętać obliczoną wartość w zmiennej, w tym celu utwórz zmienną np. o nazwie kwota do zapłaty.

Zadanie 2.3.19.

Zapisz w postaci listy kroków działania dla duszka rozliczającego kupowane bilety. Jeśli wystąpi konieczność wydania reszty nadaj komunikat wydaj resztę.
Wskazówka:
Cena wybranego biletu jest pamiętana w elemencie o numerze rodzaj listy ceny biletów, a liczba kupowanych biletów to numer kostiumu duszka Cyfry. Pamiętaj, że kwoty są pamiętane w groszach oraz kupujący może podać dokładną kwotę, mniejszą lub większą.
  1. 1.
    Zmień tło na kolejne.
  2. 2.
    Wyczyść scenę.
  3. 3.
    Pokaż duszka.
  4. 4.
    Ustaw wartość zmiennej kwota do zapłaty na: numer kostiumu duszka Cyfry)*(ceny biletów[rodzaj])/100.
  5. 5.
    Wyświetl kwotę do zapłaty i poproś o wprowadzenie kwoty przez kupującego.
  6. 6.
    Jeżeli wprowadzona kwota jest mniejsza od kwoty do zapłaty:
    1. 6.1.
      Powiedz „Niestety za mała kwota...”.
    2. 6.2.
      Zatrzymaj ten skrypt.
  7. 7.
    Jeżeli wprowadzona kwota jest równa kwocie do zapłaty:
    1. 7.1.
      Powiedz „Dziękuję, odliczyłeś dokładną kwotę.”.
    2. 7.2.
      Zatrzymaj ten skrypt.
  8. 8.
    Ukryj duszka.
  9. 9.
    Nadaj komunikat wydaj resztę.
  10. 10.
    Zatrzymaj ten skrypt.

Zadanie 2.3.20.

Utwórz skrypt uruchamiany po otrzymaniu komunikatu kupuję według algorytmu z rozwiązania poprzedniego zadania.
Wskazówka:
Do wyświetlenia napisu złożonego z tekstu i wartości zmiennej użyj polecenia połącz.

Duszek oblicza resztę

Kwota do wydania reszty to różnica pomiędzy kwotą wprowadzoną przez kupującego a kwotą do zapłaty.
Możesz założyć, że twój automat ma nieograniczoną liczbę monet każdego nominału.

Zadanie 2.3.21.

Zastanów się i spróbuj podać algorytm wyliczenia liczby monet poszczególnych nominałów, jakie ma wydać automat, jako resztę z wprowadzonej przez kupującego kwoty. Przedyskutuj swoje propozycje z kolegami i koleżankami, spróbujcie podać więcej niż jedną propozycję rozwiązania.
Algorytm 1
Wystarczy wziąć monetę o najmniejszym nominale, czyli 10 gr, i policzyć, ile ich potrzeba (reszta do wydania podzielona przez 10).
Takie rozwiązanie jest bardzo proste, ale mało przyjazne dla użytkownika. System monetarny można by ograniczyć do jednego nominału monety o najmniejszej wartości. Chyba nie chcielibyście, płacąc np. w sklepie, otrzymywać reszty wyłącznie dużą liczbą monet 10 gr, czy wręcz 1 gr?
Warto się zastanowić nad algorytmem, który zminimalizuje liczbę wydawanych monet.
Algorytm 2
Zacznij od monety o największym nominale. Wydaj jej tyle egzemplarzy, ile się da. Od kwoty reszty odejmij wartość wydanych monet i przejdź do monety o kolejnym niższym nominale. Działania te powtarzaj, aż kwota reszty będzie równa zero.

Zadanie 2.3.22.

Zapisz w postaci listy kroków algorytm wydawania reszty minimalizujący liczbę wydawanych monet. Taką strategię postępowania, w której w najbliższym kroku bierzemy to co uważamy za najlepsze (w tym wypadku monetę o największym nominale mniejszym od kwoty, która pozostała do wydania) nazywamy metodą zachłanną.
Dane:
  • kwota – reszta do wydania wyrażona w groszach.
  • monety – lista dostępnych nominałów monet uporządkowana malejąco wyrażona w groszach.

Wynik:
  • reszta – lista z liczbą monet poszczególnych nominałów o łącznej wartości kwota. Kolejność monet jest zgodna z kolejnością na liście monety.

  1. 1.
    Ustaw elementy listy reszta na zero.
  2. 2.
    Powtarzaj aż kwota będzie równa zero:
    1. 2.1.
      Ustaw zmienną i na 1.
    2. 2.2.
      Powtórz dla każdego elementu listy monety:
      1. 2.2.1.
        ustaw element reszta[i] na część całkowitą wyrażenia kwota/monety[i].
      2. 2.2.2.
        ustaw wartość zmiennej kwota na kwota-reszta[i]*monety[i].
      3. 2.2.3.
        zwiększ wartość zmiennej i o 1.
  3. 3.
    Zatrzymaj ten skrypt.

Zadanie 2.3.23.

Utwórz nowy blok dla duszka wydającego resztę zgodnie z algorytmem z poprzedniego zadania. Parametrem bloku będzie kwota reszty do wydania wyrażona w groszach. Nie musisz zerować listy reszta, zostało już to zrobione podczas tworzenia listy (po kliknięciu w zieloną flagę).
Wskazówka:
Pamiętaj, że w bloku Scratcha nie można zmieniać wartości parametru, więc musisz utworzyć pomocniczą zmienną. Do obliczenia części całkowitej liczby możesz wykorzystać funkcję podłoga.

Zadanie 2.3.24.

Zmodyfikuj skrypt dla duszka wydającego resztę, uruchamiany po otrzymaniu komunikatu kupuję. Przed nadaniem komunikatu wydaj resztę wstaw wywołanie bloku Oblicz_resztę. Pamiętaj, żeby podać jako parametr wartość reszty do wydania wyrażoną jako liczba całkowita w groszach.
Wskazówka:
Do zaokrąglenia wartości liczby rzeczywistej możesz wykorzystać bloczek zaokrąglij.

Duszek wydaje resztę

Ostatnim elementem oprogramowania automatu będzie wydanie reszty zgodnie z wyznaczoną liczbą monet o poszczególnych nominałach. Odpowiedzialny za to będzie duszek Monety, po otrzymaniu komunikatu wydaj resztę. Zwróć uwagę, że duszek jest jeden (ma sześć kostiumów, poszczególne nominały monet), a na scenie należy wyświetlić kilka monet, często także o takich samych nominałach. Umożliwia to mechanizm klonowania duszków. Więcej o klonowaniu duszków dowiesz się tutaj.

Zadanie 2.3.25.

Zapisz w postaci listy kroków algorytm generowania (klonowania) duszków monet zgodnie z ustawieniami na liście reszta.
  1. 1.
    Ustaw pomocniczą zmienną i na 1.
  2. 2.
    Ustaw pierwszy kostium (największy nominał: 5zł).
  3. 3.
    Powtórz dla każdego nominału monety:
    1. 3.1.
      Powtórz reszta[i] razy:
      1. 3.1.1.
        Sklonuj siebie.
      2. 3.1.2.
        Czekaj chwilę (np. 0.5 sekundy).
    2. 3.2.
      Zwiększ wartość zmiennej i o 1.
    3. 3.3.
      Zmień kostium na następny.
  4. 4.
    Zatrzymaj ten skrypt.

Zadanie 2.3.26.

Przygotuj skrypty dla duszka Monety:
  1. 1.
    Uruchamiany po otrzymaniu komunikatu wydaj resztę zgodnie z algorytmem z poprzedniego zadania.
  2. 2.
    Uruchamiany w wyniku wystąpienia zdarzenia Kiedy zaczynam jako klon (duszek powinien pokazać się na scenie w losowym miejscu i wydać dźwięk wypadającej monety).