Programowanie w LOGO KOMENIUSZ grafika żółwia

Podobne dokumenty
Matematyka z kluczem. Szkoła podstawowa nr 18 w Sosnowcu. Przedmiotowe zasady oceniania klasa 7

Schematy blokowe I. 1. Dostępne bloki: 2. Prosty program drukujący tekst.

Mathcad c.d. - Macierze, wykresy 3D, rozwiązywanie równań, pochodne i całki, animacje

WYMAGANIA NA POSZCZEGÓLNE OCENY MATEMATYKA KL.VII

Logo Komeniusz. Gimnazjum w Tęgoborzy. Mgr Zofia Czech

a[1] a[2] a[3] a[4] a[5] a[6] a[7] a[8] a[9] a[10]

1. LICZBY DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

Wymagania edukacyjne z matematyki w klasie VII szkoły podstawowej

WYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA VII

1. Napisz program, który wyświetli Twoje dane jako napis Witaj, Imię Nazwisko. 2. Napisz program, który wyświetli wizytówkę postaci:

lekcja 8a Gry komputerowe MasterMind

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

Liczby. Wymagania programowe kl. VII. Dział

Wykorzystanie programów komputerowych do obliczeń matematycznych

Instrukcje warunkowe i skoku. Spotkanie 2. Wyrażenia i operatory logiczne. Instrukcje warunkowe: if else, switch.

Algorytmika i programowanie

Zbiór liczb rzeczywistych, to zbiór wszystkich liczb - wymiernych i niewymiernych. Zbiór liczb rzeczywistych oznaczamy symbolem R.

Cw.12 JAVAScript w dokumentach HTML

Definicja i własności wartości bezwzględnej.

IX. Wskaźniki.(3 godz.)

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

I. Podstawy języka C powtórka

Excel. Zadania. Nazwisko:

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY VII SZKOŁY PODSTAWOWEJ

Projekt Era inżyniera pewna lokata na przyszłość jest współfinansowany przez Unię Europejską w ramach Europejskiego Funduszu Społecznego

Wymagania edukacyjne z matematyki na poszczególne do klasy VII szkoły podstawowej na rok szkolny 2018/2019

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY III

Programowanie strukturalne i obiektowe. Funkcje

Funkcje. Deklaracja funkcji. Definicja funkcji. Wykorzystanie funkcji w programie.

1. Informatyka - dyscyplina naukowa i techniczna zajmująca się przetwarzaniem informacji.

4. Funkcje. Przykłady

W wielu obliczeniach w matematyce bądź fizyce wykonanie niektórych kroków zależy od spełnienia warunku.

ZADANIA ZAMKNIETE W zadaniach 1-25 wybierz i zaznacz na karcie odpowiedzi poprawna

Kilka prostych programów

Podstawy Programowania C++

ARKUSZ KALKULACYJNY komórka

Baltie 3. Podręcznik do nauki programowania dla klas I III gimnazjum. Tadeusz Sołtys, Bohumír Soukup

WEKTORY I MACIERZE. Strona 1 z 11. Lekcja 7.

Podstawy programowania w języku Visual Basic dla Aplikacji (VBA)

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

do instrukcja while (wyrażenie);

JAVAScript w dokumentach HTML (1)

Wymagania edukacyjne niezbędne do uzyskania rocznych ocen klasyfikacyjnych z matematyki w klasie VII.

WYMAGANIA EDUKACYJNE Z MATEMATYKI Szkoła Branżowa I Stopnia

Programowanie komputerowe. Zajęcia 1

Metody numeryczne Laboratorium 2

WYMAGANIA EDUKACYJNE NIEZBĘDNE DO UZYSKANIA ŚRÓDROCZNYCH I ROCZNYCH OCEN KLASYFIKACYJNYCH Z MATEMATYKI W KLASIE III GIMNAZJUM

Wymagania edukacyjne z matematyki dla klasy I gimnazjum wg programu Matematyka z plusem

WYMAGANIA EDUKACYJNE Z MATEMATYKI KLASA I GIMNAZJUM Małgorzata Janik

Wymagania dla klasy siódmej. Treści na 2 na 3 na 4 na 5 na 6 Uczeń: Uczeń: Uczeń: Uczeń: Uczeń: DZIAŁ 1. LICZBY

3. Instrukcje warunkowe

SPIS TREŚCI WSTĘP LICZBY RZECZYWISTE 2. WYRAŻENIA ALGEBRAICZNE 3. RÓWNANIA I NIERÓWNOŚCI

Kształcenie w zakresie podstawowym. Klasa 1

LUBELSKA PRÓBA PRZED MATURĄ 2017 klasa 2 (pp)

ROZKŁAD MATERIAŁU DO II KLASY LICEUM (ZAKRES ROZSZERZONY) A WYMAGANIA PODSTAWY PROGRAMOWEJ.

Microsoft Small Basic

1 Podstawy c++ w pigułce.

1. Wypisywanie danych

Wymagania na poszczególne oceny szkolne Klasa 7

1. Znajdowanie miejsca zerowego funkcji metodą bisekcji.

Dział I FUNKCJE I ICH WŁASNOŚCI

Wykorzystanie programów komputerowych do obliczeń matematycznych, cz. 2/2

WYMAGANIA EDUKACYJNE NIEZBĘDNE DO UZYSKANIA ŚRÓDROCZNYCH I ROCZNYCH OCEN KLASYFIKACYJNYCH Z MATEMATYKI W KLASIE II GIMNAZJUM

Temat: Arkusze kalkulacyjne. Program Microsoft Office Excel. Podstawy

Laboratorium z Podstaw Programowania Zajęcia 1

przedmiot kilka razy, wystarczy kliknąć przycisk Wyczaruj ostatni,

if (wyrażenie ) instrukcja

Wykład 14. Elementy algebry macierzy

ALGORYTMY. 1. Podstawowe definicje Schemat blokowy

ZESPÓŁ SZKÓŁ W OBRZYCKU

WYMAGANIA EDUKACYJN KRYTERIA OCENY Z MATEMATYKI W KLASIE II GIMNAZJUM

Klasy: String, Random, Math. Korzystanie z dokumentacji.

Matematyka klasa 7 Wymagania edukacyjne na ocenę śródroczną.

Przedmiotowe zasady oceniania i wymagania edukacyjne z matematyki dla klasy drugiej gimnazjum

WYMAGANIA EDUKACYJNE Z MATEMATYKI DLA KLASY VII

ODPOWIEDZI I SCHEMAT PUNKTOWANIA ZESTAW NR 2 POZIOM PODSTAWOWY. Etapy rozwiązania zadania

Obliczenia iteracyjne

LUBELSKA PRÓBA PRZED MATURĄ MATEMATYKA - poziom rozszerzony

Wymagania edukacyjne z matematyki dla ucznia klasy VII

Przypomnienie wiadomości dla trzecioklasisty C z y p a m i ę t a s z?

WYMAGANIA EDUKACYJNE Z MATEMATYKI W KLASIE 7 SZKOŁY PODSTAWOWEJ

Pzetestuj działanie pętli while i do...while na poniższym przykładzie:

Algorytm. a programowanie -

Ćwiczenie nr 3. Wyświetlanie i wczytywanie danych

KRYTERIA OCENIANIA Z MATEMATYKI W OPARCIU O PODSTAWĘ PROGRAMOWĄ I PROGRAM NAUCZANIA MATEMATYKA 2001 DLA KLASY DRUGIEJ

Wymagania edukacyjne matematyka klasa VII

1. FUNKCJE DZIAŁ Z PODRĘCZNIKA L.P. NaCoBeZu kryteria sukcesu w języku ucznia

Zagadnienia do małej matury z matematyki klasa II Poziom podstawowy i rozszerzony

Wymagania edukacyjne matematyka klasa 1 zakres podstawowy 1. LICZBY RZECZYWISTE

2) R stosuje w obliczeniach wzór na logarytm potęgi oraz wzór na zamianę podstawy logarytmu.

ROZKŁAD MATERIAŁU NAUCZANIA KLASA 1, ZAKRES PODSTAWOWY

Programowanie w języku Python. Grażyna Koba

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

WYMAGANIA EDUKACYJNE

Wymagania edukacyjne z matematyki dla uczniów klasy VII szkoły podstawowej

Sponsorem wydruku schematu odpowiedzi jest wydawnictwo

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

Wymagania na egzamin poprawkowy z matematyki dla klasy I C LO (Rok szkolny 2015/16) Wykaz zakładanych osiągnięć ucznia klasy I liceum

Proste programy w C++ zadania

Transkrypt:

PODSTAWOWE PROCEDURY TEKSTOWE Programowanie w LOGO KOMENIUSZ grafika żółwia Postać polecenia Skrót Znaczenie 1. TEKSTY TS cały ekran w trybie tekstowym. ZMAŻTEKST ZT czyści ekran tekstowy 3. PISZ coś PS coś pisze coś na ekranie 4. UK [k w] ustawia kursor w kolumnie k i wierszu w 5. UKT liczba ustawia kolor tła i kolor tekstu 1. Polecenie TS zmienia obszar roboczy okna głównego na ekran tekstowy. Zmiana tego ustawienia na ekran graficzny nastąpi po wydaniu polecenia EG (cały obszar roboczy okna zmieni się na ekran graficzny), a na ekran graficzny z oknem tekstowym poleceniem DZIELEKRAN.. Polecenie ZT jest odpowiednikiem CS w trybie graficznym. 3. Polecenie PS coś jest poleceniem z jednym parametrem. Tym parametrem jest coś. W zależności od parametru PS ma dwa znaczenia: pisze dosłownie ciąg znaków coś, ciąg ten musi być poprzedzony cudzysłowem lub ujęty w nawias kwadratowy, dokonuje obliczeń wyrażenia matematycznego, pisze jego wynik. Przykłady wariantów użycia polecenia PS: PS komputer - pisze słowo komputer PS - pisze pusty wiersz PS 69 - pisze 69 PS +3 - pisze 5 (wynik dodawania) PS [klasa szósta] - pisze wyrażenie klasa szósta PS mój komputer - pojawia się komunikat błędu: nie wiem jak wykonać komputer PS mój komputer - pojawia się komunikat błędu: nie wiem co zrobić z komputer Można zwiększyć liczbę parametrów polecenia PS. Postać tego polecenia jest następująca (polecenie ujmujemy w nawiasy zwykłe): (PS coś1 coś coś3...) 4. Polecenie UK [k w] służy do ustawienia kursora na ekranie w miejscu, od którego ma być pisany tekst. Parametr [k w] ustala to miejsce, w którym k oznacza numer kolumny (współrzędna pozioma), w numer wiersza (współrzędna pionowa). Współrzędna [1 1] znajduje się w lewym górnym rogu ekranu tekstowego. Dozwolone zakresy dla k: 1-80, dla w: 1-6. Polecenie ZT ustawia kursor na pozycji [1 1]. 5. Polecenie UKT liczba ustala kolor tła i kolor tekstu. Parametr liczba ustala się przez obliczenie wyrażenia według następującego wzoru: liczba 16 * nr_koloru_tła + nr_koloru_tekstu Dopuszczalny zakres dla koloru tła i koloru tekstu: 0-15 (16 kolorów). Przykład: UKT 40 ustala tekst czarny na białym tle (16*15+040; kolor biały 15, kolor czarny 0). 1

WYKONYWANIE OBLICZEŃ W LOGO W trybie dialogu możemy wykonywać obliczenia wyrażeń arytmetycznych. Wykorzystamy do tego celu polecenie PS, którego parametrem będzie wyrażenie arytmetyczne. Zapis i obliczanie wyrażeń arytmetycznych odbywa się według takich samych zasad, jakie stosujemy w matematyce. W wyrażeniach tych używać możemy tylko nawiasów zwykłych. Funkcje pierwotne: + funkcja dodawania - funkcja odejmowania * funkcja mnożenia / funkcja dzielenia ABS n wskazuje wartość bezwzględną danej liczby SUMA a b wykonuje dodawanie liczb a i b RÓŻNICA a b wykonuje odejmowanie liczb a i b ILOCZYN a b wykonuje mnożenie liczb a i b ILORAZ a b wykonuje dzielenie liczby b przez a RESZTA a b oblicza resztę z dzielenia liczby b przez a PWK n oblicza pierwiastek kwadratowy danej liczby ENT n podaje część całkowitą liczby, odrzuca jej część ułamkową ZAOKR n zaokrągla daną liczbę do wartości całkowitej LOSOWA n losuje liczbę całkowitą z zakresu od 0 do (n-1); gdzie n 0 STARTLOS zmienia wartość początkową generatora liczb losowych Funkcja SUMA i ILOCZYN posiada dwa parametry, tzn. można wykonać obliczenia tylko na dwóch liczbach. Można zwiększyć, podobnie jak dla polecenia PS, liczbę tych parametrów. Wówczas zapis tych funkcji wygląda następująco: (SUMA liczba1 liczba liczba3...) (ILOCZYN liczba1 liczba liczba3...) Logo domyślnie wypisuje liczby dziesiętne z dwoma miejscami po przecinku. Możemy ten format liczby zmieniać. Do tego służy polecenie: UFL n ustal format liczby z liczbą miejsc po przecinku określoną przez parametr n. Dozwolony zakres parametru dla UFL: 0 18. ZMIENNE W LOGO Zmienna to obiekt, który ma nazwę i wartość. Wartością zmiennej może być słowo, lista lub obraz. Zmienne dzielimy na: tekstowe (wartością jest słowo lub lista), obrazowe (wartością jest obraz). Słowo to skończony ciąg znaków, np. 13, komputer, klasa6, ab8c, itp. Słowa, które nie są liczbą, poprzedzamy cudzysłowem. Lista to ciąg elementów oddzielonych spacją, ujęty w nawiasy kwadratowe, np. [Kasia lubi koty], [1 18 0 5]. Elementami listy są słowa. Zmienne tworzymy za pomocą poleceń pierwotnych PRZYP (PRZYPISZ) lub NAZWIJ. Ich składnia jest następująca: PRZYP nazwa_zmiennej wartość

NAZWIJ wartość nazwa_zmiennej Nazwę zmiennej przy jej tworzeniu (określaniu) poprzedzamy cudzysłowem, a jeśli ją wywołujemy (używamy) poprzedzamy dwukropkiem, np. PRZYP x 5 PS :x Wartością może być: liczba (13), zmienna (:bok), wyrażenie arytmetyczne (3+5), wyrażenie algebraiczne (:a+*:b), tekst ( komputer, [klasa szósta]), polecenia, funkcje. Funkcje sterujące w Logo: CZYTAJSŁOWO (CSW) - Logo czeka, aż wpiszemy słowo i naciśniemy ENTER CZYTAJLISTĘ (CL) - Logo czeka, aż wpiszemy listę i naciśniemy ENTER CZYTAJKLAWISZ (CK) - wynikiem jest kod ASCII znaku naciśniętego CZYTAJZNAK (CZ) - wynikiem jest znak naciśniętego klawisza ASCII znak - wynikiem jest liczba (od 0 do 55) przyporządkowana danemu znakowi. Jeśli parametrem ASCII będzie słowo, to podany będzie kod pierwszego znaku tego słowa. ZNAK liczba - wynikiem jest znak, którego liczba jest kodem. Napisanie programu komputerowego w jednej procedurze jest możliwe dla bardzo prostych przypadków. W praktyce program taki składa się z kilku procedur, które muszą być ze sobą powiązane. Przykład_1: Napisz procedurę, który wczytuje wysokość osoby (w centymetrach) oraz jego wagę (w kilogramach). Zwraca informację czy dana osoba ma niedowagę, waży prawidłowo, czy ma nadwagę, według następujących kryteriów: Niedowaga jeżeli (waga < wzrost/.5), Waga normalna jeżeli (wzrost/.5 < waga < wzrost/.3), Nadwaga jeżeli (wzrost/.3 < waga). oto waga ts zt ps [Program sprawdza twoją wagę] ps [Podaj wzrost w cm.] przyp "wz csw ps [Podaj wagę w kg.] przyp "wg csw jeśli :wg < :wz /.5 [pisz [Masz niedowagę]] jeśli i ( :wg > :wz /.5 ) ( :wg < :wz /.3 ) [pisz [Waga normalna]] jeśli ( :wz /.3 < :wg ) [pisz [Masz nadwagę]] Przykład_: Napisz procedurę, która oblicza pierwiastki funkcji kwadratowej ax^ + bx + c 0 oto kwad 3

ts zt ps [Program oblicza pierwiastki funkcji kwadratowej ax^ + bx + c 0] ps [Podaj a] przyp "a csw ps [Podaj b] przyp "b csw ps [Podaj c] przyp "c csw jeśli :a 0 [ps [To nie jest funkcja kwadratowa] stop] przyp "d :b * :b - 4 * :a * :c jeśli :d > 0 [przyp "x1 ( - :b - pwk :d ) / * :a ~ przyp "x ( - :b + pwk :d ) / * :a ( ps [x1 ] :x1 [x ] :x )] jeśli :d 0 [przyp "x1 ( - :b / * :a ) ( ps [x1 x ] :x1 )] jeśli :d < 0 [ps [Brak rozwiązań]] Przykład_3: Napisz grę zgadnij liczbę. Oto założenia do tej gry: komputer losuje liczbę w zakresie od 1 do 100, którą ma zgadnąć użytkownik, po każdej próbie użytkownik będzie informowany: czy podana liczba jest za duża, za mała lub równa wylosowanej, w przypadku zgadnięcia liczby wyświetlany będzie komunikat informujący o zgadnięciu liczby ze wskazaniem liczby podejmowanych prób (licznik). oto gra ts zt przyp "l 0 przyp "a 1 + losowa 100 zgaduj zt ( ps "Liczbę :a [zgadłeś za] :l "razem ) oto zgaduj ps [Podaj liczbę 1-100] przyp "b csw jeśli liczba? :b [zgaduj1][ps [to nie jest liczba, próbuj dalej] zgaduj] oto zgaduj1 jeśli :b > :a [przyp "l :l + 1 ps [za duża, próbuj dalej] zgaduj] jeśli :b < :a [przyp "l :l + 1 ps [za mała, próbuj dalej] zgaduj] Zadania do wykonania na zajęciach: 1. Napisz procedurę, która wczytuje długość wyrażoną w centymetrach, jako wynik drukuje długość wyrażoną w calach. Zabezpiecz program tak aby nie można było wczytać długości ujemnej.. Napisz procedurę, która wczytuje trzy liczby, jako wynik drukuje liczbę największą. 3. Napisz procedurę, która wczytuje trzy liczby a, b, c. Program sprawdza czy liczba c należy do przedziału (a;b>. 4

Funkcje w logo Funkcja różni się od zwykłej procedury tym, że zwraca pewną wartość. W związku z tym ponadto jeżeli wywołujemy funkcję, to musimy powiedzieć co chcemy zrobić z tą wartością podstawić ją pod jakąś zmienną, czy umieścić jako parametr procedury. Funkcje liczbowe (których wynik jest liczbą) predefiniowane w logo (pierwotne) to między innymi: ABS (moduł) ARCTAN (arctg) COS EXP (exponent) ILOCZYN ILORAZ ILORAZC (całkowity) INT (część całkowita) LN (logarytm) LOSOWA PWK (pierwiastek) RÓŻNICA RESZTA (reszta z dzielenie pierwszego parametru przez drugi) SIN SUMA TAN (tg) ZAOKR Możemy też definiować własne funkcje. Sposób postępowania jest podobny jak w przypadku procedur. Ogólna postać funkcji jest taka sama jak procedury różni ją od niej tylko obecność słowa wynik, po którym wpisujemy to co ma być zwracane przez funkcję. UWAGA: Wynik kończy działanie funkcji tzn. jeśli napiszemy wynik, a następnie np. pisz "coś, to polecenie pisz nie będzie wykonane. Oto przykład funkcji. Poniżej zdefiniowana jest funkcja kwadratowa (yax^+bx+c): OTO KWADRATOWA :X :A :B :C WYNIK :A * :X * :X + :B * :X + :C JUŻ Funkcja liczbowa postaci: 3 - x dla x z przedziału <, +nieskonczonosc ) y x dla x z przedzialu (-,) -x dla x z przedzialu (-nieskonczonosc, -> oto fun :X jeśli :X > [wy abs 3 - :X][jeśli :X < - [wy -1 * :X][wy * :X]] 5

Funkcje logiczne Funkcjami logicznymi są funkcje zwracające wartość logiczną prawda albo fałsz. Takie funkcje można potem zastosować przy sprawdzaniu warunków. Np. Funkcja sprawdzająca czy dane a b c mogą być długościami boków trójkąta OTO TRÓJKĄT? :A :B :C WY ( I ( :A < :B + :C ) ( :B < :A + :C ) ( :C < :B + :A ) ) JUŻ Którą następnie można zastosować w następnej funkcji: OTO PISZ_CZY_TRÓJKĄT :A :B :C JEŚLI TRÓJKĄT :A :B :C [PISZ [TO JEST TRÓJKĄT]] [PISZ TRÓJKĄT]] JUŻ [TO NIE JEST W procedurze TRÓJKĄT? Został użyty spójnik logiczny I. Użycie standardowo I (oraz LUB) używa się z dwoma parametrami, które muszą być stałymi logicznymi (prawda, fałsz) lub wyrażeniami logicznymi (np. :a < 0). Jeżeli chcemy użyć I lub LUB z więcej niż dwoma parametrami umieszczamy całość w nawiasie okrągłym. Mówi się wtedy że jest to postać zachłanna funkcji. Zadanie_1 Napisz funkcję która oblicza pole trójkąta na podstawie długości jego boków. Skorzystaj ze wzoru Herona. Algorytm: 1. Oblicz połowę obwodu trójkąta Ob(a+b+c)/.. Oblicz pole ze wzoru Ppwk(Ob*(Ob-a)*(Ob-b)*(Ob-c)). Układ równań Układ równań liniowych można określić jednoznacznie przez podanie jego współczynników. A zatem układ równań : ax + by dx + ey c f można opisać w ten sposób, że podajemy jego współczynniki zapisane w prostokątnej tablicy (zwanej macierzą): a b c. d e f W praktyce okazuje się, że łatwiej posługiwać się macierzami kwadratowymi. W naszym przypadku będą one wyglądać następująco: a b c b a c,,. d e f e d f Każdej macierzy kwadratowej przypisuje się pewną liczbę, która nazywa się wyznacznikiem. 6

a b DEFINICJA: Wyznacznikiem macierzy nazywamy liczbę ae db, d e a b a b którą oznaczamy. Mamy więc ae db. d e d e Oznaczenia: Układu równań : ax + by dx + ey c f WYZNACZNIK GŁÓWNY (charakterystyczny) UKŁADU W a d b e WYZNACZNIK ZE WZGLĘDU NA ZMIENNĄ X W x c f b e WYZNACZNIK ZE WZGLĘDU NA ZMIENNĄ Y W y a d c f Jeśli znamy te trzy wyznaczniki, to możemy określić zbiór rozwiązań układu ax + by c dx + ey f. Układ równań pierwszego stopnia z dwiema niewiadomymi ax + dx + by ey c, f, gdzie gdzie a d + + b e > > 0 0 1. ma tylko jedno rozwiązanie Wx x W Wy y W, jeśli W 0.. ma nieskończenie wiele rozwiązań, jeśli W W x W y. 3. nie ma rozwiązań, jeśli W 0 i przynajmniej jeden z wyznaczników W x, W y jest różny od zera, co można zapisać następująco : W 0 ( W x 0 W y 0 ). 7

Schemat blokowy algorytmu Programowanie w LOGO KOMENIUSZ grafika żółwia Zadanie_ Na podstawie powyższej teorii napisz kilka funkcji: 1. wyznacznik :a :b :d :e. wyznacznikx :b :c :e :f 3. wyznaczniky :a :c :d :f 4. iks :wyznacznikx :wyznacznik 5. igrek :wyznaczniky :wyznacznik oraz procedurę oblicz, która wczytuje współczynniki równań, a następnie w zależności od warunków drukuje odpowiednie informacje. 8

Zadanie_3 Napisz funkcję potega :x :n oto potega :x :n przyp "i 0 przyp "s 1 powtórz :n [przyp "s :s * :x] wy :s 9