Odgadywanie daty urodzin

Materiały stworzone przez trenerów programu „Mistrzowie Kodowania” finansowanego przez Samsung Electronics Polska, objęte licencją CC BY SA 3.0 PL "Creative Commons Uznanie Autorstwa 3.0 Polska".

aplikacja opisana w scenariuszu: https://scratch.mit.edu/projects/92705957/

Część I


Założenia projektu: Odgadnienia była to ulubiona rozrywka matematyczna w XVII i XVIII wieku. Zdolność odgadywania pomyślanej liczby, rezultatu pewnych kombinacji arytmetycznych, uważano wówczas za przejaw czarnoksięstwa :-) Projekt polega na odgadnięciu daty urodzenia użytkownika gry, jedynie na podstawie wykonania przez niego pewnych działań matematycznych. Inspiracją do stworzenia projektu była książka Szczepana Jeleńskiego “LILAVATI”.

Opis projektu:

“Odgadywanie daty urodzin” to projekt, w którym występuje jeden duszek - przewodnik całej gry. Na początku nasz bohater wita się z graczem, a następnie informuje uczestnika zabawy, jakie powinien wykonać kolejno działania, aby z uzyskanej przez niego liczby “odgadnąć” jego datę urodzin.

Część II

Realizacja: Tworzenie sceny, duszków oraz skryptów


Zacznijmy od przygotowania sceny. Wybieramy duszka oraz dobieramy tło gry, która zostanie uruchomiona poprzez naciśnięcie zielonej flagi.

Ur1.PNG

Rys. 1 Ustawienie tła sceny


Na początku duszek wita się z uczestnikiem i prosi go o wykonanie następujących działań matematycznych:

  1. Liczbę, która oznacza dzień twoich urodzin, pomnóż przez 20 i dodaj 77.
  2. Sumę pomnóż przez 5 i dodaj liczbę oznaczającą miesiąc, w którym przyszedłeś na świat.
  3. Pomnóż tę sumę przez 20 i znów dodaj 77.
  4. Pomnóż przez 5, dodaj liczbę złożoną z dwóch ostatnich cyfr roku, w którym się urodziłeś.

Na koniec prosi gracza, aby ten podał mu, jaką otrzymał liczbę.

Ur2.PNG

Rys. 2 Kolejne działania matematyczne


Zasada odgadnięcia daty urodzenia jest bardzo prosta. Wystarczy, że od otrzymanego wyniku odejmiemy liczbę 38885. Wówczas otrzymany wynik oznajmi nam datę urodzenia gracza, gdzie dwie ostatnie cyfry wskazują rok, dwie środkowe - miesiąc, a pozostałe - dzień urodzenia.

Załóżmy, że gracz urodził się 22 października 1976 roku. Wykonując kolejno wskazane działania, otrzyma następujące rezultaty pośrednie:

20 * 22 + 77 = 517

5 * 517 + 10 = 2595

20 * 2595 + 77 = 51977

5 * 51977 + 77 = 259961

A zatem odpowiedź, którą poda duszkowi, jest liczba: 259961. Po odjęciu od niej liczby 38885 otrzymamy 221076.

Problemem jest tutaj, w jaki sposób pokazać na scenie tę datę? Podanie np. wyniku 221076 nie będzie z pewnością zbyt łatwe do odczytania jako 22 października 1976 roku. A może 2076 roku?

W tym celu należy rozważyć dwa przypadki:

  • gracz urodził się w XX wieku - wówczas początkowymi cyframi roku będą 19;
  • gracz urodził się w XXI wieku- wówczas początkowymi cyframi roku będą 20.

Oczywiście bardzo łatwo można zmodyfikować program w przypadku gracza, który urodził się w innym wieku :-)

Zatem po uruchomieniu programu duszek pyta użytkownika, w jakim wieku się urodził:

Ur3.PNG

Rys. 3 Zapytanie o wiek, w którym urodził się gracz


Kolejnym problemem, który możemy zauważyć jest sytuacja, gdy użytkownik urodził się w dniu złożonym z liczby jednocyfrowej. Wówczas otrzymany ostateczny wynik będzie liczbą pięciocyfrową. Zatem dwie ostatnie cyfry wskażą rok urodzenia, druga i trzecia - miesiąc, a pierwsza cyfra - dzień urodzenia.


W celu poprawnego wyświetlenia na scenie daty urodzin, stwórzmy pięć zmiennych:

  1. wynik - tutaj zapiszemy liczbę, którą gracz otrzyma po wykonaniu wszystkich działań matematycznych (czyli jego odpowiedź na pytanie duszka: “Jaką liczbę otrzymałeś?”)
  2. data - wynik, który otrzymamy po wykonaniu działania: “odpowiedź - 38885”
  3. dzień - to będzie zmienna wskazująca dzień urodzin
  4. miesiąc - to będzie zmienna wskazująca miesiąc urodzin
  5. rok - to będzie zmienna wskazująca rok urodzin

Wartość zmiennych tuż po uruchomieniu programu ustawiamy na 0.

Ur4.PNG

Rys. 4 Ustawienie początkowych wartości dla zmiennych


Następnie po wpisaniu odpowiedniej liczby przez gracza, która jest odpowiedzią na pytanie: “Jaką liczbę otrzymałeś?”, ustawiamy zmienne wynik i data:

Ur5.PNG

Rys. 5 Ustawienie wartości dla zmiennych wynik i data


Zajmijmy się pierwszym przypadkiem: gracz urodził się w XXI wieku, a otrzymany ostateczny wynik jest liczbą pięciocyfrową. Wówczas możemy wyświetlić datę jego urodzin w następujący sposób (gdzie dzień, miesiąc i rok urodzin oddzielamy np. kropką):

Ur6.PNG

Rys. 6 Wyświetlenie daty urodzin gracza w I przypadku


II przypadek: gracz urodził się w XXI wieku, ale ostateczny wynik jest liczbą sześciocyfrową. Datę jego urodzin możemy wyświetlić w następujący sposób:

Ur7.PNG

Rys. 7 Wyświetlenie daty urodzin gracza w II przypadku


Zatem skrypt do wyświetlenia daty urodzin w przypadku XXI wieku może wyglądać następująco:

Ur8.PNG

Rys. 8 Wyświetlenie daty urodzin gracza urodzonego w XXI wieku


W przypadku gdy gracz urodził się w XX wieku, należy jedynie zmodyfikować sposób wyświetlenia roku urodzin: zamiast 20 pojawi się tu 19.

Przykładowy skrypt projektu może wyglądać w następujący sposób:

Ur9.PNG

Rys. 9 Wyświetlenie daty urodzin gracza urodzonego w XX wieku


Ciekawostka:

Przytoczona liczba 77, którą się dwukrotnie dodaje, może być zastąpiona każdą inną liczbą k z tą jedną zmianą, że zamiast 38885, czyli 505 * 77, odejmować trzeba będzie 505 * k.

Ostatnio zmodyfikowano 13:43, 23 mar 2017