Laboratorium 10: Maszyna stanów

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

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

INFORMATYKA Studia Niestacjonarne Elektrotechnika

Wstęp do Programowania, laboratorium 02

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

1 Powtórzenie wiadomości

Zmienne, stałe i operatory

Analiza leksykalna 1. Języki formalne i automaty. Dr inż. Janusz Majewski Katedra Informatyki

1 Podstawy c++ w pigułce.

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

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

Tablice deklaracja, reprezentacja wewnętrzna

Laboratorium 3: Tablice, tablice znaków i funkcje operujące na ciągach znaków. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Analiza leksykalna 1. Teoria kompilacji. Dr inż. Janusz Majewski Katedra Informatyki

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Zadanie nr 3: Sprawdzanie testu z arytmetyki

Inicjacja tablicy jednowymiarowej

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

Laboratorium 5: Tablice. Wyszukiwanie binarne

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

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

Podstawy Informatyki Maszyna Turinga

Lekcja 6: Pascal. Procedura i funkcja

Wstęp do informatyki- wykład 2

Uniwersytet Zielonogórski Instytut Sterowania i Systemów Informatycznych. Ćwiczenie 3 stos Laboratorium Metod i Języków Programowania

Podstawy programowania w C++

Podstawy i języki programowania

1. Wprowadzanie danych z klawiatury funkcja scanf

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Podstawy programowania w C++

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

Kod U2 Opracował: Andrzej Nowak

Podstawy programowania w C++

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Podstawy programowania w języku C++

Metoda znak-moduł (ZM)

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

OPERACJE WEJŚCIA / WYJŚCIA. wysyła sformatowane dane do standardowego strumienia wyjściowego (stdout)

Zadanie analizy leksykalnej

INFORMATYKA. Zajęcia organizacyjne. Arytmetyka komputerowa.

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Podstawy programowania

lekcja 8a Gry komputerowe MasterMind

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

W języku C/C++ pomiędzy wskaźnikami a tablicami istnieje bardzo ścisły związek. Do onumerowania elementów w tablicy służą tzw. INDEKSY.

Formatowane (tekstowe) wejście/wyjście. Binarne wejście/wyjście.

Spis treści OPIS PLIKU W FORMACIE CSV Z DANYMI PPE LUB EP 1

n, m : int; S, a, b : double. Gdy wartości sumy składowej nie można obliczyć, to przyjąć Sij = 1.03 Dla obliczenia Sij zdefiniować funkcję.

Języki programowania. Przetwarzanie tablic znaków. Część druga. Autorzy Tomasz Xięski Roman Simiński

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Pracownia Komputerowa wykład V

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Podstawy Kompilatorów

Instrukcje sterujące. wer. 11 z drobnymi modyfikacjami! Wojciech Myszka :53:

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia.

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

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Podstawowe typy zmiennych

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

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

1 Podstawy c++ w pigułce.

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

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

Programowanie komputerowe. Zajęcia 4

Urządzenia Techniki. Klasa I TI. System dwójkowy (binarny) -> BIN. Przykład zamiany liczby dziesiętnej na binarną (DEC -> BIN):

Ćwiczenie 4. Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1.

Podstawy programowania

EGZAMIN MATURALNY Z INFORMATYKI

Wstęp do programowania. Reprezentacje liczb. Liczby naturalne, całkowite i rzeczywiste w układzie binarnym

Podstawy Kompilatorów

Kier. MTR Programowanie w MATLABie Laboratorium

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 1. Karol Tarnowski A-1 p.

Podstawy programowania. Wykład: 9. Łańcuchy znaków. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

#include <stdio.h> void main(void) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

MATERIAŁY DO ZAJĘĆ II

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

System liczbowy jest zbiorem reguł określających jednolity sposób zapisu i nazewnictwa liczb.

#include <stdio.h> int main( ) { int x = 10; long y = 20; double s; s = x + y; printf ( %s obliczen %d + %ld = %f, Wynik, x, y, s ); }

Pliki wykład 2. Dorota Pylak

Podstawy programowania. Wykład: 5. Instrukcje sterujące c.d. Stałe, Typy zmiennych c.d. dr Artur Bartoszewski -Podstawy programowania, sem 1 - WYKŁAD

Formatowanie zawartości komórek

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

Obsługa plików. Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Laboratorium Podstaw Informatyki Strona 1. Kraków 2013

Podstawą w systemie dwójkowym jest liczba 2 a w systemie dziesiętnym liczba 10.

Ćwiczenie: JavaScript Cookies (3x45 minut)

Wprowadzenie. Organizacja pracy i środowisko programistyczne. Mirosław Ochodek


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

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

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

Pętle i tablice. Spotkanie 3. Pętle: for, while, do while. Tablice. Przykłady

Warto też w tym miejscu powiedzieć, że w C zero jest rozpoznawane jako fałsz, a wszystkie pozostałe wartości jako prawda.

Podstawy Informatyki

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Podstawy informatyki. Informatyka Stosowana Zajęcia nr 5. autor: Grzegorz Smyk

QR code. Ramka składa się z następujących części: typ, liczba znaków, dane, terminator, dopełnienie do oktetu, dopełnienie do ramki.

Autor: dr inż. Katarzyna Rudnik

Zadanie 1. Suma silni (11 pkt)

Transkrypt:

Wojciech Myszka Laboratorium 10: Maszyna stanów 2016-05-07 09:05:39 +0200 1. Wprowadzenie Laboratorium poświęcone jest operacjom na napisach (ciągach znaków). Przypominam, że: a to stała typu char o wartości znaku (litery) a małe; "Ala ma kota" to stała typu char (czyli tablica znakowa) zawierająca napis Ala ma kota ; char z = A ; to deklaracja zmiennej o nazwie zet zainicjowanej wartością literą A wielkie ; char napis[]="ala ma kota"; to deklaracja tablicy znakowej o długości 12 elementów (jedenaście liter i specjalny znak, o kodzie ASCII 0) informujący o końcu napisu; zawartość tablicy może być dowolnie modyfikowana, ale nie możemy przekroczyć sumarycznej długości 11 liter (plus znak końca). char tekst = "Ala ma kota"; to deklaracja wskaźnika typu char i zainicjowanie go wartością adresu miejsca pamięci, w którym przechowywana jest stała znakowa o wartości Ala ma kota ; W efekcie jest to też tablica o długości 11 znaków (plus znak końca), ale jej zawartość nie może być modyfikowana! pojawiający się czasami w napisach znak oznacza odstęp. na zmiennych znakowych można wykonywać normalne operacje porównywania: a < b, tekst[0]== A, itd. Funkcja sprawdzająca czy liczba jest odstępem moze wyglądac tak: int czy_odst ęp ( char x ) { return x == x == \n x == \ t ; } Funkcja jako odstępy traktuje spacje, znak nowej linii i znak tabulacji. 1

2. Zadanie do wykonania Mamy dwa zadania do wyboru: 1. Funkcja sprawdzająca czy zadany ciąg liczb jest liczbą całkowitą. 2. Funkcja sprawdzająca czy zadany ciąg liczb jest liczbą rzeczywistą. (A dokładniej mówiąc, czy liczba zostanie potraktowana właściwie jako dana wejściowa dla programu napisanego w C, albo czy będzie właściwą stałą odpowiedniego typu 1.) 3. Maszyna stanów Żeby zadanie zrealizować trzeba najpierw zastanowić się jak wygląda (poprawna) liczba całkowita. Nie jest to skomplikowane: Na jej początku jest (być może) pewna liczba odstępów 2 (które nie mają wpływu na poprawność liczby); może je zignorować. Później jest (nieobowiązkowy) znak (+ ). Po znaku musi wystąpić co najmniej jedna cyfra. Po pierwszej cyfrze może wystąpić zero lub więcej cyfr. Zakładamy, że pierwszy odstęp (po cyfrach) kończy liczbę. Kończy ją również znak o kodzie ASCII 0 (zero). Można sobie życie ułatwić (albo utrudnić) budując maszynę Turinga, która mając na taśmie napis przejrzy go i zdecyduje czy napis jest liczbą czy też nie. Program nawiązuje do maszyny Turinga. Szerzej opisywana ona była na zajęciach z Technologii Informacyjnych. Możemy skonstruować maszynę Turinga realizującą algorytm sprawdzania czy napis jest liczbą, zgodnie z powyższymi zasadami. Wyglądać ona będzie tak jak na rysunku 1. Zakładamy, że liczba zapisana jest na taśmie, a głowica znajduje się przed pierwszym znakiem napisu. Na diagramie tym, podwójne okręgi oznaczają stan początkowy i stany końcowe. Opisy nad krawędziami (lab na prawo od nich) oznaczją kategorie znaków, które mogę się pojawić: +, to (ewentualny) znak liczby; oznacza tak zwany biały znak (czyli w najprostszym przypadku jest to odstęp, w sytuacjach bardziej skomplikowanych może to być nowa linia, 1 Ale rozważamy wyłącznie typy podstawowe! 2 Jako odstępy uważać będziemy dowolne znaki białe (to znaczy takie, które nie zostawiają na papierze żadnego czarnego śladu). Będą to odstęp, znak tabulacji (\t), znak nowej linii (\n) i być może jeszcze jakieś... 2

start, + znak cyfry pusty OK blad Rysunek 1. Diagram (uproszczonej) maszyny Turinga sprawdzający czy napis jest liczbą znak poziomej lub pionowej tabulacji, wysów strony). Wszystkie takie znaki przed rozpoczęciem cyfry mogą być po cichu zignorowane; to dowolna cyfra z zakresu od 0 do 9; to umowny (symboliczny) zapis znaku o kodzie ASCII zero, oznaczający w języku C koniec napisu; to (ponownie umowny) zapis oanaczajacy znaki, które nie zostały jeszcze rozpatrzone. Nie gwarantuję, oczywiście, że przedstawione schematy są poprawne. Każda ścieżka od start od OK powinna opisywać poprawną postać liczby. Można opisać podobne zasady opisujące wygląd liczby rzeczywistej: ignorujemy znaki puste na początku; później może być +/ /cyfra, pomiędzy cyframi może pojawić się kropka (lub przecinek) dziesiętna, po cyfrach może pojawić się litera e (lub E) a po niej plus albo minus albo odstęp, a później cyfra/cyfry wykładnika. 3

Uproszczony (choć niewolny zapewne od błędów) diagram maszyny Turinga sprawdzającej czy napis jest liczbą rzeczywistą przedstawia rysunek 2. start pusty <kropka> znak <kropka> cyfry ułamek0 kropka ułamek wykładnik znakw cyfraw koniec błąd Rysunek 2. (Uproszczony) diagram przejść maszyny Turinga sprawdzającej czy napis jest liczbą rzeczywistą Wybieramy jedno z tych zadań i programujemy. Wszystkie czynności sprawdzające powinna wykonywać funkcja (na potrzeby instrukcji nazwę ją czy, wywoływana w sposób następujący: int czy ( char napis [ ] ) ; 4

na przykład: i f ( czy ( " +123 " ) p r i n t f ( " Liczba! \ n " ) ; Funkcja zwraca wartość jeden gdy napis jest liczbą, zero w przeciwnym razie. Można próbować utrudnić/ułatwić sobie życie programując szereg funkcji pomocniczych sprawdzających czy: znak jest cyfrą (int czy_cyfra( char );) jest znakiem (+ ) int czy_znak( char ); odstępem,... 4. Uwagi Uwaga 1: Można zaprogramować funkcję bardziej rozbudowaną, która będzie poprawnie rozpoznawała jako liczby stałe dwójkowe, ósemkowe czy szesnastkowe... Uwaga 2: Na koniec zajęc należy wysłać na adres e-mail prowadzacego zadanie w takiej postaci do jakiej uda się je doprowadzić... Uwaga 3: Można zaprogramować oba! Uwaga 4: Można pokusić się o rozpoznawanie liczb całkowitych zapisanych ósemkowo (zaczynają się od cyfry 0), później mogą być tylko cyfry z zakresu 0 7 i/lub szesnastkowo. 5. Wersja PDF tego dokumentu...... pod adresem. Wersja: 50 z drobnymi modyfikacjami! data ostatniej modyfikacji 2016-05-07 09:05:39 +0200 5