KODOWANIE ZNAKÓW I PROTOKOŁÓW

Wielkość: px
Rozpocząć pokaz od strony:

Download "KODOWANIE ZNAKÓW I PROTOKOŁÓW"

Transkrypt

1 KODOWANIE ZNAKÓW I PROTOKOŁÓW - 1 -

2 Wprowadzenie do kodowania Jerzy Pejaś: Standardy i Systemy Otwarte Dlaczego kodowanie jest ważne? Protokoły sieciowe, np. protokół TCP/IP warstwy transportowej, bazują na przesyłaniu sekwencji bajtów pomiędzy portem nadającym, a portem odbierającym. Protokoły te nie będą poprawnie pracowały dotąd dopóki oba porty nie uzgodnią, jak interpretować przesyłane sekwencje oktetów. Procedura przekształcania informacji w przesyłaną sekwencję oktetów nazywana jest kodowaniem. Z kolei procedura przekształcania sekwencji oktetów do postaci struktur danych, łatwo interpretowalnych przez odbierającą aplikację, nazywana jest procesem dekodowania. Problem: Dlaczego struktura danych zdefiniowana poniżej w języku C, nie może być bezpośrednio przesłana za pośrednictwem sieci z jednego komputera na drugi? Takie przesyłanie działa przecież poprawnie w przypadku przekazywania np. struktury passanger jako parametru do dowolnej funkcji. typedef char String[80]; typedef struct flight { String airline[2]; int flightnumber; flight *nextflight; } *FLIGHTPOINTER; struct passenger { String personalname[2]; int age; - 2 -

3 }; double weight; char gender; FLIGHTPOINTER usertexts[5]; Istnieje ku temu co najmniej kilka powodów: 1. Zmienne typu String mogą być przechowywane w różny sposób w komputerze nadającym i odbierającym. Np. na niektórych komputerach bajty grupowane są w czwórki i zapisywane w 32 bitowym słowie maszynowym, i co więcej mogą przy okazji zmieniać ich kolejność (tak jest to robione w IBM PC). Oznacza to, ze przesyłając ciąg znaków, który w komputerze nadającym pamiętany jest tak: A B C D E F G H w komputerze odbierającym może zostać umieszczony w pamięci w sposób całkiem inny: D C B A H G F E 2. Różne komputery mogą przechowywać ten sam znak w inny sposób, tzn. mogą one używać różnych wzorców bitowych do reprezentacji bitowej tego samego znaku (patrz Tab.1). Tabela 1: Kodowanie znaku Ä Zbiór znaków Reprezentacja heksadecymalna znaku Ä ISO Latin One C4 Unicode (ISO 10646), UCS C4 Unicode, UTF-8 coding E2C4 CP850 (old MS-DOS) 8E ISO 6937/1 C861 Mac OS

4 3. Liczby całkowite reprezentowane są w różny sposób na różnych komputerach. Wynika to z tego, że liczby całkowite mogą być pamiętane na 16-, 32- lub 64 bitach. Dodatkowo, liczby ujemne kodowane są albo jako dopełnienie do jedynki lub dopełnienie do dwójki. 4. W odmienny sposób mogą być reprezentowane liczby zmiennoprzecinkowe: mogą mieć różną długość w bitach, różnie może wyglądać podział (w bitach) na cechę (eksponentę) i mantysę, przy czym cecha może mieć podstawę 2, 10 lub Różne komputery pamiętają w odmienny sposób zmienne typu Boolean (występuje np. w języku Pascal). W komputerach typ Boolean pamiętany jest na jednym bajcie, przy czym w niektórych przypadkach wartość TRUE reprezentuje dowolna niezerowa wartość bajtu, w innych wartość 1, to TRUE, zaś 0, to wartość FALSE. Komputer odbierający będzie miał problemy ze zmiennymi wskaźnikowymi, np. typu FLIGHTPOINTER, ponieważ nie jest w stanie bezpośrednio odwołać się do danych wskazywanych przez ten typ. Wniosek: Jeśli jeden z komputerów przesyłana dane w swojej wewnętrznej reprezentacji, to komputer odbierający, wierząc, iż odbierane dane są w jego wewnętrznej reprezentacji, może źle je zinterpretować. Pomiędzy dwoma komputerami muszą wystąpić więc procedury kodowania i dekodowania. Są one zbędne tylko w przypadku, gdy komputery te mają taką samą architekturę sprzętowo-programową. Zbiory znaków Znaki widoczne na papierze lub ekranie monitora zwykło określać się znakami widocznymi (w slangu informatyków anglojęzycznych glyph). Na przykład znakiem widocznym litery O jest pionowa elipsa, cyfry 0 bardziej wyszczuplona elipsa. Te same znaki widoczne mogą wyglądać różnie, np. A, A, A. Literze A można nadać nawet inną postać (poprzez tzw. rendering), ale nadal jest to ten sam znak - 4 -

5 widoczny. Różne postacie tego samego znaku nazywa się krojem czcionki, np. w czcionce Milano LET litera ma postać: A. Zbiorem znaków jest zbiór znaków widocznych wraz informacja mówiącą o tym jak znak jest kodowany na jednym lub więcej bajtach. Zbiór znaków pamiętany jest w postaci tworzy tzw. strony kodowej. Większość zbiorów znaków są wariantami zbioru znaków Latin, zawierającym litery od A do Z. Występują jednak całkiem odmienne zbiory znaków, np. cyrylica, znaki chińskie, japonskie, itp. Ten sam zbiór znaków może mieć więcej niż jeden sposób kodowania, zależny od określonego zbioru znaków. Występuje także dodatkowe kodowanie stosowane przez niektóre protokoły do sekwencji przesyłanych bajtów. Tabela 2: Najbardziej znane zbiory znaków - 5 -

6 - 6 - Jerzy Pejaś: Standardy i Systemy Otwarte

7 Tabela 2: Najbardziej znane zbiory znaków (c.d.) Kodowanie UTF-8 zdefiniowanie w normie ISO Norma ISO definiuje tzw. Universal Character Set (w skrócie Unicode lub UCS). Bazuje on na zbiorze 31-bitowych znaków, którego liczność może teoretycznie wynosić 2 31 znaków

8 Do chwili zdefiniowano tylko znaki (pozycje od 0x0000 do 0xFFFD). Ten 16-sto bitowy podzbiór nazywany jest Basic Multilingual Plane (BMP). Heksadecymalne numery, które reprezentują kody UCS poprzedzane są umownie zawsze znakami U+. Sąd np. znaki US-ASCII oznaczane są w UCS jako znaki z przedziału od U+0000 do U+007F. UCS jest przede wszystkim tabelą kodów, które przypisują liczby całkowite znakom. Istnieje kilka alternatywnych sposobów reprezentowania tego typu przyporządkowania. Dwa najbardziej rozpowszechnione sposoby kodowania przechowują teksty UCS jako sekwencje 2 lub 4 bajtów. Oficjalne okreśłenia tych spsobów kodowania to UCS-2 i UCS-4. Stosowanie kodowania UCS-2 i UCS-4 stwarza wiele problemom zwłaszcza programistom C. W kodach tych występują często bajty o wartości \0, które w C maja specjalne znaczenie jest to koniec napisu tekstowego (stringu). Tego typu problemów nie ma z kodowaniem UTF-8 (UCS Transformation Format), opisanym w dodatku R normy ISO oraz RFC Kodowanie UTF-8 ma następujące własności: 1. znaki UCS od U+0000 do U+007F kodowane sa na jednym bajcie jako wartości od 0x00 do 0x7F, 2. wszystkie znaki UCS wieksze od U+007F są kodowane jako sekwencja kilku bajtów, z których każdy ma ustawiony najbardziej znaczący bit, 3. pierwszy bajt sekwencji wielobajtowej, który reprezentuje znak nie należący do ASCII, ma zawsze wartość z zakresu od 0xC0 do 0xFD, i wskazuje ile bajtów tworzy ten znak. Wszystkie pozostałe znaki należą do zakresu 0x80 0xBF. 4. Teoretycznie UTF-8 umożliwia kodowanie znaku na maksymalnie 6 bajtach, znaki należące do zbioru BMP kodowane są jednak tylko na maksymalnie 3 bajtach

9 5. Do zbioru kodów UTF-8 nie należą nigdy dwa bajty: 0xFE i 0xFF. Pierwszy z bajtów 0xFE jest używany jako oznaczenie (kod) UTF-8, zaś 0xFF oznacza kodowanie UCS. Kody te umieszcza się zwykle np. na początku pliku, w którym umieszcza się następnie znaki tekstu, zapisane w kodzie UTF-8 lub UCS. W Tab.3 przedstawiono sekwencje bajtów, które reprezentują kody UCS zapisane w UTF-8. Tabela 3: Translacja kodów UCS-4 na UTF-8 Przykład: Znak Copyright należący do BMP kodowany jest jako U+00A9 = Korzystając z Tab.3 znak ten w UTF-8 można zakodować następująco: = 0xC2 0xA9 Kodowanie tekstowe i binarne Wyróżnia się dwie główne metody kodowania: metoda tekstowa wszystkie informacje przed przesłaniem do komputera odbierającego przekształcane są do formatu tekstowego. Np. liczba rzeczywista przekształcana jest do postaci napisu tekstowego " " i następnie kodawana przy zastosowaniu załóżmy ISO Latin

10 metoda binarna informacja przekształcana jest do zestandaryzowanego formatu binarnego, niezależnego od architektury komputera. Np. w przypadku liczby binarnej można podstawę systemu obliczeń, mantysę oraz cechę oddzielnie przekształcić do postaci napisu binarnego (ang. binary string), zawierającego znaki 1 i 0 i przesłać poprzez łącza. Także każdy dowolny napis tekstowy można przesłać jako napis binarny. Przykładami protokołów, które korzystają z metody tekstowej jest SMTP (Simple Mail Transfer Protocol), HTTP (Hypertext Transfer Protocol). Z metody binarnej korzystają z kolei protokoły: LDAP (Lightweight Directory Access Protocol), DNS (Domain Naming System). Kodowanie struktur informacyjnych W sieci przesyłane są nie tylko proste typy danych takie jak liczby lub napisy tekstowe, ale także struktury informacyjne. Struktura informacyjna wskazuje: gdzie jeden element danych kończy się, a zaczyna następny, jaki rodzaj informacji zawarty jest w elemencie danych, np. czy liczba oznacza temperaturę, prędkość lub kierunek, które z elementów danych należą do tej samej struktury informacyjnej, np. która temperatura, prędkość oraz kierunek tworzą strukturę oznaczająca pomiar parametrów wiatru w określonej chwili czasu

11 Kodowanie początkowego i końcowego elementu danych W Tab.4 przedstawiono niektóre metody kodowania elementu początkowego i końcowego. Każda z tych metod posiada swoje zalety oraz wady. Tabela 4: Kodowanie elementu początkowego i końcowego

12 Kodowanie o stałej długości polega na zarezerwowaniu ściśle określonego rozmiaru każdego elementu danych. Np. rok można kodować tylko jako ostatnie dwie cyfry (i zarezerwować na to tylko 7 bitów), ale wynik takiego założenia jest znany - Y2K (problem roku 2000). Kodowanie długości każdy wysyłany element danych poprzedzany jest liczbą przesyłanych oktetów. Kodowanie to może stwarzać problem w przypadku przesyłania dużej, z góry nieznanej liczby oktetów. Przykład: przesyłanie głosu lub obrazu wideo. Ogranicznik kodowania każdy przesyłany element kończony jest z góry określonym znakiem ograniczającym, np. średnikiem. Problem: nie można umieszczać znaku ogranicznika w treści przesyłanego elementu. Aby obejść to ograniczenie stosuje się różne metody, np.: wprowadza się specjalny znak poprzedzający (tzw. escape), np. jeśli jako ogranicznika użyto znaku ; i aby można było użyć go w napisie o postaci abc;def, to należy poprzedzić go np. znakiem \, abc\;def. A co zrobić w przypadku napisu a\bc\;def? Zakodować należy także znak \, co prowadzi do następującego ciągu: a\\bc;def. Wymaga się powtórzenia znaku poprzedzającego, np. jeśli znakiem poprzedzającym jest ", to napis ab"bc" "de jest kodowany następująco: ab""bc"" ""de. Objęcie danych znakiem cudzysłowia i powtarzanie duplikowanie dowolnego znaku cudzysłowia w tekście. Np. napis ab"bc""de jest kodowany następująco: "ab""bc""""de". Przykład: protokół SMTP. Kodowanie danych przy pomocy ograniczonego zbioru znaków i używanie w roli ogranicznika dowolnego znaku spoza tego zbioru. Przykłądami tego typu jest kodowanie BASE64 oraz UUENCODE

13 Kodowanie znaków specjalnych przy pomocy sekwencji znaków, które zawierają numeryczną wartość kodu znaku. Przykłady: (a) (b) (c) (d) metoda kodowania oparta na cytowaniu znaku drukowalnego (ang. quoted-printable encoding method), np. w protokole MIME znak Ä kodowany jest jako =C4, ponieważ C4 jest heksadecymalna wartością tego znaku, metoda kodowania jednostki znaku HTML (ang. HTML Character Entity encoding method) - znak Ä kodowany jest jako Ä, gdzie 196 jest dziesiętną wartością tego znaku, metoda kodowania nagłówka MIME (ang. MIME header encoding method) - znak Ä kodowany jest jako =?iso ?q?=c4?=, gdzie iso oznacza zbiór znaków ISO Latin 1, q mówi, że zastosowano metodę kodowania opartą na cytowaniu znaku drukowalnego, zaś =C4 zawiera wartość, która wynika z przyjętej metody kodowania, metoda kodowania URL - znak Ä kodowany jest jako %C4, gdzie C4 jest heksadecymalna wartością znaku Ä należącego do zbioru ISO Latin 1. Kodowanie znaków specjalnych jako sekwencji pewnych znaków, które opisują słownie znaczenie znaku. Przykładem może być znak Ä, który w HTML kodowany jest jako Ä, gdzie Auml oznacza A with umlaut. W pewnych przypadkach należy zastosować metodę, która jest kombinacją innych. Komputer nadający koduje przy pomocy jednej metody, wynik przekazuje drugiej metodzie, itp., by w końcu ostateczny wynika przesłać komputerowi odbierającemu. Komputer odbierający dekoduje otrzymana informacje w

14 kolejności odwrotnej do tej, którą stosował komputer nadający. Rys.1 ilustruje ten proces na przykładzie przesyłania poczty. Rys.1 Metody kodowani w różnych warstwach

15 Kodowanie danych binarnych przy pomocy kodowania tekstowego Problem: jak przesyłać dane binarne, np. kod programu wykonywalnego, przy wykorzystaniu kodowania tekstowego? Istnieją dwie metody: Jeśli do dyspozycji mamy ośmiobitowy kanał transportowy, to możemy po prostu podzielić dane binarne na części po osiem bitów (oktety) i przesłać je w takiej postaci jakiej się znajdują. Przesyłanie tego typu łączy się zwykle z metodą kodowania długości w celu oznaczenia końca binarnego elementu danych. Dane binarne koduje się jako tekst. Stosuje się przy tym dwa podejścia: UUENCODE i BASE64. Kodowanie BASE64 jest bardziej niezawodne i przebiega następująco: Weź trzy kolejne oktety (24 bity), podziel je na cztery 6 bitowe części, a następnie zakoduj każde 6 bitów jako jeden znak (bajt). Ponieważ na 6 bitach można zapisać 64 różnych wartości, stąd w procesie kodowania niezbędnych jest tylko 64 różnych znaków. Znaki te zostały wybrane spośród tych znaków ASCII, które znane są jako znaki niezaburzające procesu przesyłania po łączach

16 Kodowanie struktur informacyjnych Często zachodzi konieczność przesyłania złożonych zbiorów wzajemnie powiązanych elementów informacyjnych, np.: typedef char String[80]; typedef struct { String givenname; String surname; } Name; struct PersonalRecord { int age; double weight; Name name; } Do kodowania tego typu złożonych struktur najczęściej stosowane są dwie metody: (a) kodowanie znacznika-długości-wartości, kodowanie TLV (ang. tag-length-value encoding, TLV encoding) oraz (b) kodowanie tekstowe. Kodowanie TLV Każdy element struktury danych dzielony jest na trzy części: (1) znacznik (ang. tag), który umożliwia określenie, czy to jest np. wiek, waga, nazwa, nazwisko i imię, (2) długość (ang. length), określająca liczbę oktetów niezbędną do zapisania wartości elementu danych, (3) wartość (ang. value)

17 Kodowanie TLV może umożliwia realizację kodowania zagnieżdżonego, tzn. TLV może zawierać inne TLV (patrz rys.2). Przykład kodowania rozważanej przykładowej struktury informacyjnej PersonalRecord przedstawiony jest w Tab.5. Rys.2 Przykład zagnieżdżonego kodowania TLV

18 Kodowanie tekstowe Przy zastosowaniu kodowania tekstowego wiadomości zawarte w strukturze PersonalRecord można zakodować jako następujący napis tekstowy (<CR/LF> oznacza znak powrotu karetki i nowej linii). lub Age: 58; Weight: 45.6; Name: Jan, Kowalski <CR/LF> Age: 58 <CR/LF> Weight: 45.6 <CR/LF> Name: <CR/LF> Given name: Jan <CR/LF> Surname: Kowalski <CR/LF> Przykładem kodowania tekstowego nagłówek standardowej poczty elektronicznej. Received: from mail.ietf.net <CR/LF> by info.dsv.su.se (8.8.8/8.8.8) with ESMTP <CR/LF> id HAA06480 for <jpalme@dsv.su.se>; <CR/LF> Wed, 22 Jul :51: <CR/LF> Message-ID: <AF4C1AD5F2ED305D823AF@ietf.net> <CR/LF> From: Erik Nielsen <erikn@ietf.net> <CR/LF> To: Jacob Palme <jpalme@dsv.su.se> <CR/LF> Subject: Example of an header <CR/LF> Date: Tue, 24 Jul :25: <CR/LF> W kodowaniu tekstowym używa się zwykle znaków ogranicznika kodowania. W powyższym przykładzie w tej roli użyto: ":", ";", "<", ">", "from", "by", "id", " ". Słowa: Message-ID, Received, From, To, Subject i Date są znacznikami, zaś w polu Received występują podznaczniki from, by i id

19 Tabela 5: Przykład kodowania TLV

20 Tabela 5: Przykład kodowania TLV (c.d.)

21 Zaawansowane metody kodowania Jerzy Pejaś: Standardy i Systemy Otwarte W przypadku definiowania specyfikacji protokołów korzysta się zwykle ze specjalnych języków (notacji). W praktyce używane są trzy tego rodzaju języki: ABNF, ASN.1 i XML. Rozszerzona notacja Backus-Naura ABNF (ang. Augmented Backus-Naur Form) Notacja ABNF została po raz pierwszy znormalizowana w RFC 822, a następnie zmodyfikowana w RFC ABNF (jak również ASN.1) bazują na notacji BNF, użytej w 1958 podczas specyfikacji języka Algol 60. Rozpatrzmy analizowany już poprzednio rekord: Age: 58; Weight: 45.6; Name: Jan, Kowalski <CR/LF> i zapiszmy go w notacji ABNF personal-record = age "; " weight "; " name CR LF age = "Age: " integer weight = "Weight: " decimal-value name = given-name "," surname given-name = 1*LETTER ; one or more letters surname = 1*LETTER integer = 1*D ; one or more digits decimal-value = 1*D "." 0*D ; zero or more decimals

22 Podstawowe konstrukcje składniowe notacji ABNF Konstrukcja albo-albo definiowana jest przy użyciu znaku "/" i oznacza wybór jednej z dwóch możliwości answer = "Answer: " ("Yes" / "No") określa następujące dwie alternatywne wartości Answer: Yes i Answer : No Sekwencje elementów tego samego typu (powtórzenia) umożliwiają definiowanie liczbę powtórzeń danego elementu. Pełnia postać składni jest następująca: <a>*<b>element gdzie <a> i <b> są opcjonalnymi liczbami całkowitymi, określającymi ile co najmniej i ile co najwyżej razy powtórzony zostanie element. Domyślnymi wartościami a i b są odpowiednio 0 i nieskończoność. Stąd zapis *(element) oznacza dowolna lczbe powtórzeń elementu. Przykłady: yes-no-series = *("yes" / "no") five-yes-no-series = 5*5("yes" / "no") one-to-five-yes-no-series = 1*5("yes" / "no") Komentarz w ABNF zaczyna się od znaku średnika i kończy się za ostatnim znakiem w wierszu. Reguła w notacji ABNF definiowana jest jako następująca sekwencja: name = elements crlf gdzie <name> jest nazwą reguły, <elements> - jedną lub wieloma nazwami reguł lub specyfikacja końcowa, zaś <crlf> oznacza koniec linii

23 Elementy <elements> ujęte we wspólną pare nawiasów traktowane sa jako pojedynczy element. Stąd np.: "(elem (foo / bar) elem)" oznacza ciąg: lub "elem foo elem" "elem bar elem" Przykład z RFC 822: authentic = "From" ":" mailbox ; single author / ("Sender" ":" mailbox; actual submittor "From" ":" 1*("," LWSP mailbox)) Wartości końcowe - reguły rozwijane są (zapisywane) do postaci ciągów wartości końcowych, nazywanych czasami znakami. W notacji ABNF znak jest po prostu nieujemna liczba całkowitą. Wartości końcowe oznaczane są przez jeden lub więcej znaków numerycznych (cyfr), poprzedzone znakiem bazowym, interpretującym ten ciąg znaków. Dostępne są następujące znaki bazowe: b = binarny d = decymalny x = heksadecymalny Stąd np. CR = %d13 CR = %x0d

24 oznacza dziesiętną i heksadecymalną reprezentację kodu ASCII znaku powrotu karetki. Wartości końcowe można łączyć, używając w tym celu znaku kropki. Na przykład: CRLF = %d13.10 Notacja ABNF dopuszcza bezpośrednie definiowanie literałów tekstowych, zawartych pomiędzy znakami cudzysłowów: command = "Ala Ma kota" Liniowe białe znaki (LWSP) umożliwiają określenie zero, jednego lub więcej białych znaków, które mogą następnie wyświetlenie na ekranie. LWSP = *(WSP / CRLF WSP) ; linear white space (past newline) CR = %x0d ; carriage return CRLF = CR LF ; Internet standard newline LF = %x0a ; linefeed WSP = SP / HTAB ; white space SP = %x20 HTAB = %x09 ; horizontal tab Przy zastosowaniu LWSP można np. napisać: yes-no-series = *(("yes" / "no") LWSP) co umożliwia utworzenie m.in. takich napisów: "yes " "yes no " "no" "yes yes yes " "" "yes yes no "

25 Konkatenacja jest regułą, która definiuje uporządkowany ciąg wartości, np. znaków, poprzez pokazanie sekwencji nazw reguł, np. foo = %x61 ; a bar = %x62 ; b mumble = foo bar foo Alternatywa elementy rozdzielone znakiem "/". Stąd np. foo / bar oznacza akceptację foo lub bar. Zakres wartości definiowany jest przy użyciu znaku "-". Na przykład DIGIT = %x30-39 jest równoważny alternatywie znaków DIGIT = "0"/"1"/"2"/"3"/"4"/"5"/"6"/ "7"/"8"/"9" Podsumowanie notacji ABNF Oznaczenie / n*m(element) n*n(element) n*(element) *n(element) n#m(element) Znaczenie either or Repetition of between n and m elements Repetition exactly n times Repetition n or more times Repetition not more than n times Same as n*m but comma-separated

26 [ element ] Optional element,same as *1(element) Oznaczenie Znaczenie Yes /No Either Yes or No 1*2(DIGIT) One or two digits 2*2(DIGIT) Exactly two digits 1*(DIGIT) A series of at least one digit *4(DIGIT) Zero,one,two,three or four digits 2#3("A") A,A or A,A,A [ "";"para ] The parameter string can be included or omitted ; Text from a semicolon (;)to the end of a line is a comment Przykłady zastosowania ABNF Przykład 1 z RFC 822: LWSP-char = SPACE / HTAB ; Przykład 2 z RFC 822: mailbox = addr-spec ; simple address / phrase route-addr ; name & addr-spec addr-spec = local-part "@" domain ; global address phrase = 1*word ; Sequence of words word = atom / quoted-string

27 Zapis ten spełniają następujące sekwencje znaków: Jerzy Pejas Przykład 3 z RFC 822: optional-field = / "Message-ID" ":" msg-id / "Resent-Message-ID" ":" msg-id / "In-Reply-To" ":" *(phrase / msg-id) / "References" ":" *(phrase / msg-id) / "Keywords" ":" #phrase / "Subject" ":" *text / "Comments" ":" *text / "Encrypted" ":" 1#2word / extension-field ; To be defined / user-defined-field ; May be pre-empted Zapis ten spełniają następujące sekwencje znaków: In-Reply-To: <12345*jerzy.pejas@wi.ps.pl> In-Reply-To: <12345*jerzy.pejas@wi.ps.pl> <5678*jerzy.pejas@wi.ps.pl> In-Reply-To: Your message of July 26 <12345*jerzy.pejas@wi.ps.pl> Keywords: flowers, tropics, evolution Przykład 4 z RFC 822 (ilustruje użycie nawiasów [ ] - opcji): received = "Received" ":" ; one per relay

28 ["from" domain] ; sending host ["by" domain] ; receiving host ["via" atom] ; physical path *("with" atom) ; link/mail protocol ["id" msg-id] ; receiver msg id ["for" addr-spec] ; initial form Zapis ten spełniają następujące sekwencje znaków: Received: from mars.su.se (root@mars.su.se ) by zaphod.sisu.se (8.6.10/8.6.9) with ESMTP id MAA29032 for cecilia@sisu.se Skaner leksykalny notacji ABNF Pod pojęciem skanera leksykalnego rozumie się najniższy poziom składni, reguły rozpoznawania znaków i składania je w słowa. Poniżej przedstawiono skaner leksykalny zaczerpnięty z RFC 822 ilustrujący jak taki skaner może zostać użyty do zdefiniowania ABNF. CHAR = <any ASCII character> ; ( 0-177, ) ALPHA = <any ASCII alphabetic character> ; ( , ) ; ( , ) DIGIT = <any ASCII decimal digit> ; ( 60-71, ) CTL = <any ASCII control ; ( 0-37, ) character and DEL> ; ( 177, 127.) CR = <ASCII CR, carriage return> ; ( 15, 13.) LF = <ASCII LF, linefeed> ; ( 12, 10.)

29 SPACE = <ASCII SP, space> ; ( 40, 32.) HTAB = <ASCII HT, horizontal-tab> ; ( 11, 9.) <"> = <ASCII quote mark> ; ( 42, 34.) CRLF = CR LF LWSP = SPACE / HTAB ; semantics = SPACE Przedstawiony powyżej zapis używa raczej tekstu otwartego aniżeli notacji ABNF. Wersja ABNF z 1997 roku zawiera konstrukcje, które umożliwiają zapisanie skanera tylko przy zastosowaniu: ALPHA = %x41-5a / %x61-7a ; A-Z / a-z BIT = "0" / "1" CHAR = %x01-7f ; 7-bit US-ASCII character, excl. NUL CR = %x0d ; carriage return CRLF = CR LF ; Internet standard newline CTL = %x00-1f / %x7f ; controls DIGIT = %x30-39 ; 0-9 DQUOTE = %x22 ; " (Double Quote) HEXDIG = DIGIT / "A" / "B" / "C" / "D" / "E" / "F" HTAB = %x09 ; horizontal tab LF = %x0a ; linefeed LWSP = *(WSP / CRLF WSP) ; linear white space (past ; newline) OCTET = %x00-ff ; 8 bits of data SP = %x20 Notacja ASN.1 (ang. Abstract Syntax Notation One) Abstract Syntax Notation One (ASN.1) jest notacją wykorzystywaną do opisu wiadomości wymienianych pomiędzy komunikującymi się aplikacjami

30 Dostarcza mechanizmy opisu danych na wysokim poziomie, które zwalniają projektanta od konieczności operowania na poziomie bitów i bajtów. Notacja ASN.1 opracowana została przez ITU-T w roku 1988 i przyjęta jako rekomendacja X.208 (odpowiednik ISO/IEC : 1993). W roku 1997 opracowano obiektową wersję ASN.1, która przyjęła w postać rekomendacji X.680 (ISO/IEC :1998). Zasady kodowania ASN.1 są zbiorem reguł, umożliwiających przekształcenie danych z notacji ASN.1 do standardowego formatu, który może być zdekodowany przez dowolny system, posiadający dekoder pracujący w oparciu o ten sam zbiór reguł. Zasady kodowania/dekodowania są unormowane i przedstawione w normie ISO/IEC 8825 (X.690 i X.691). Aktualnie w użyciu są następujące formaty kodowania: Basic Encoding Rules (BER), Distinguished Encoding Rules (DER), Canonical Encoding Rules (CER), Packed Encoding Rules (PER), Light Weight Encoding Rules (LWER) Ogólne informacje na temat ASN.1 Notacja ASN.1 jest alternatywą do notacji ABNF, stosowana przy opisie złożonych struktur. O ile jednak ABNF używana jest najczęściej do kodowania tekstowego, to ASN.1 znajduje zastosowanie głównie przy kodowaniu binarnym

31 Określony zapis struktury w notacji ASN.1 można w różny sposób przekształcić do postaci binarnej (BER, DER, itp.). Najszerzej stosowane jest kodowanie BER. Główna zasada notacji ASN.1 mówi, że nowe typy danych mogą być definiowane przy użyciu typów prostszych. Dalej zobaczymy, jak jest to robione. Przykład: Załóżmy, że chcemy przesyłać temperaturę mierzoną przez nasze urządzenie w stopniach Kelvina. Temperatura jest wielkością rzeczywistą i może być kodowana na wiele sposobów. W standardzie ASN.1 można zapisać to następująco: Temperature ::= REAL -- w stopniach Kelvina Zapis ten mówi jednak tylko tyle, że temperatura jest typu REAL (zmienna rzeczywista) i powinna zostać zakodowana tak samo jak każda inna liczba zmiennoprzecinkowa. Typ REAL, podobnie jak inne typy: INTEGER, BOOLEAN, STRING, etc. Jest typem wbudowanym w ASN.1 Informację, której nie jesteśmy w stanie formalnie zakodować, możemy podawać w formie komentarza poprzedzonego znakami "--" (patrz przykład powyżej). Skąd więc odbiorca po otrzymaniu przesłanej wartości będzie wiedział, że wartość ta należy interpretować jako temperaturę (i to jeszcze jako temperaturę w stopniach Kelvina), a nie jako np. prędkość wiatru lub wilgotność powietrza? Jednym ze sposobów jest wprowadzenie tzw. znaczników (ang. tag). Znacznik jest etykieta, która jest przesyłaną przed wartościami danych i oznacza jaki typ danych jest przesyłany. W naszym przypadku definicja z użyciem znacznika może mieć postać: Temperature ::= [APPLICATION 0] REAL -- w stopniach Kelvina

32 Zapis ten oznacza, że w aplikacji przesyłającej dane o temperaturze użyliśmy znacznika [APPLICATION 0] na oznaczenie, że występujące po nim dane oznaczają temperaturę w stopniach Kelvina. Innych znaczników możemy użyć na oznaczenie prędkości wiatru i wilgotności powietrza: Temperature ::= [APPLICATION 0] REAL WindVelocity ::= [APPLICATION 1] REAL Humidity ::= [APPLICATION 2] REAL Powyższe zapisy definiują trzy nowe typy Temperature, WindVelocity i Humidity. Definicja Temperature ::= [APPLICATION 0] REAL określa nowy typ danych, zbudowany na bazie typu wbudowanego REAL. Przy zastosowaniu bezpośrednich znaczników oba znaczniki przesyłane są w postaci: Czasami wymaga się, aby nowy typ danych był kombinacją kilku innych typów. Na przykład liczba zespolona może być kodowana jako kombinacja dwóch wartości rzeczywistych: ComplexNumber ::= [APPLICATION 3] SEQUENCE { imaginarypart REAL, realpart REAL }

33 Zdefiniowane nowe typy danych mogą być podstawą budowania kolejnych typów danych. Np.: WeatherReading ::=[APPLICATION 4 ] SEQUENCE { temperaturereading Temperature, velocityreading WindVelocity, humidityreading Humidity } Ten ostatni typ możemy wykorzystać do przesłania serii odczytów parametrów pogody, dokonanych na różnych wysokościach nad poziomem morza. Można w tym celu zbudować nowy typ SeriesOfReadings: SeriesOfReadings ::=[APPLICATION 5 ] SEQUENCE OF AltituteReading AltitudeReading ::=[APPLICATION 6 ] SEQUENCE { altitude Altitude, weatherreading WeatherReading } Altitude ::=[APPLICATION 7 ] REAL -- Meters above sea levelc Powyższa definicja składa się z trzech produktów (typów) ASN, z których każdy odwołuje się do produktów zdefiniowanych później (podejście od ogółu do szczegółu, ang. top-down). Tego typu uporządkowanie nie jest konieczne, ale z pewnością ułatwia odczyt definiowanych typów. Rozważane definicje umożliwiają przesłanie danych w postaci ciągu bitów (ciągu oktetów), który wygląda następująco:

34 Jerzy Pejaś: Standardy i Systemy Otwarte

35 Oznaczenia stałych w ASN.1 Chociaż informacja przesyłana pomiędzy dwoma komputerami nie składa się zwykle z wartości stałych, to jest oczywiste, że notacja ASN.1 musi pozwalać na zapis wielkości zarówno stałych, jak i zmiennych. Definicje stałych wykorzystywane są najczęściej podczas definiowania innych typów ASN.1. Np. zamiast pisać: Windowline ::= GeneralString (SIZE (80)) możemy zdefiniować stałą i następnie użyć jej: Windowline ::= GeneralString (SIZE (linelength)) linelength ::= 80 Terminologia ASN.1 Typem lub typem danych jest zbiór dozwolonych wartości. Typ może zostać zdefiniowany poprzez wyliczenie wszystkich dozwolonych wartości lub zdefiniowany tak, że może przybierać nieskończoną liczbę wartości (podobnie jak typ INTEGER lub REAL) Nowy typ zdefiniowany na bazie elementów zdefiniowanych poprzednio nazywany jest typem strukturalizowanym. Przykład definicji typu strukturalizowanego: ComplexNumber::= [APPLICATION 3] SEQUENCE { imaginarypart REAL, realpart REAL }

36 Specyfikacja składni notacji ASN.a nazywana jest składnią abstrakcji. Z kolei składnia stosowana w aktualnie realizowanej wymianie danych pomiędzy dwoma stronami określana jest mianem składni przesyłu. Specyfikacja określająca w jaki sposób składnia abstrakcji przekładana jest na składnię tworzy zasady kodowania. Przykładem takich zasad jest kodowanie BER. Produkt (typ) ASN.1 jest reguła (zasadą) definiowania jednego typu na bazie typów już zdefiniowanych. Składnia budowania produktu ASN.1 ma postać: nazwa nowego typu (musi zaczynać się z dużej litery, A-Z), operator ::=, definicja nowego typu. Komentarz Komentarz w ASN.1 rozpoczyna się dwoma kolejnymi znakami myślnika "--", zaś kończy także dwoma znakami "--" lub znakiem nowej linii. Typy predefiniowane, wbudowane w ASN.1 Typy proste Typy znakowe, napisy Typy strukturalizow ane Typy pomocnicze BOOLEAN NumericString SET GeneralizedTime INTEGER PrintableString SET OF UTCTime ENUMERATED TeletexString SEQUENCE EXTERNAL REAL VideotexString SEQUENCE OF BIT STRING VisibleString CHOICE

37 OCTET IA5String ANY STRING NULL GraphicString [Tagged ] OBJECT IDENTIFIER GeneralString UniversalString BMPString UTF8String CharacterString <Różne warianty ISO 10646, <nie występujące w wersji z <roku 1998 Uwaga: W przypadku typów Graphic, General,Universal, BMP i UTF8 rekomendowane jest stosowanie ograniczeń Format identyfikatorów Nazwy pól oraz nazwy stałych muszą rozpoczynać się z małej litery (a-z). Nazwy typów z kolei rozpoczynają się z dużej litery (A-Z). W notacji ASN.1 rozróżniane są więc duże i małe litery. Nazwa może składać się jedynie z małych liter (a-z), dużych liter (A-Z) i znaku myślnika "-". Typy proste Typ INTEGER określa zbiór liczb całkowitych (ujemnych, zero i dodatnich). W przeciwieństwie do języków programowania, w których reprezentacja liczb typu całkowitego ograniczona jest do 32 lub 64 bitów, w notacji ASN.1 nie nakłada się żadnych ograniczeń na liczbę bitowej reprezentacji typu

38 INTEGER (liczba ta nie posiada predefiniowanych wartości minimalnej i maksymalnej). Przykład definicji: Number-of-years ::=INTEGER Weekday ::=INTEGER {monday(1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6), sunday(7)} Ostatni z zapisów nie ogranicza wartości Weekday jedynie do wartości 1-7; zmienna tego typu może przyjmować dowolną wartość całkowitą. Podtypy. W ASN.1 można ograniczać zakres wartości zmiennych. Dotyczy to zwłaszcza typu INTEGER. Przykład: Weekday ::=INTEGER {monday(1), tuesday(2), wednesday(3), thursday(4), friday(5), saturday(6), sunday(7)} (1..7) Podtypy określane są w nawiasach okrągłych, umieszczanych po definicji typu. W przypadku typu INTEGER dostępne są następując polecenia, określające podtypy: Przykład +0%.7&'59GGMFC[ ^ Opis 9U\[UVMKGYCTVQśEKRQOK EKRQOKęF\[YCTVQ F\[YCTVQśEK EKąFQNP FQNPą CIóTP TPą 2QLGF[PE\CYCTVQść 9U\[UVMKGYCTVQśEKQMTG EKQMTGśNQPGRT\G\V[R 9GGMFC[.KUVCYCTVQśEKQFF\KGNQP[EJQFUKGDKG \PCMKGO^

39 Inne konstrukcje, które umożliwiają definiowane podtypów typów różnych INTEGER zostaną podane dalej. Przykłady definicji podtypów (MAX lub MIN oznacza brak ograniczeń nałożonych na dany typ): OddSingleDigitPrimes ::= INTEGER (3 5 7 ) SingleDigitPrimes ::= INTEGER (2 INCLUDES OddSingleDigitPrimes ) PositiveNumber ::= INTEGER (1..MAX ) Month ::= (1..12) Month ::= (1..<13 ) Typ BOOLEAN. Typ BOOLEAN może przyjmować tylko dwie wartości TRUE i FALSE. Przykład: ShopOpen ::= BOOLEAN Definicja typu BOOLEAN nie może przybierać np. postaci: Gender ::= BOOLEAN {male (TRUE),female (FALSE)} Stałe male i female można jednak zainicjować tak: Gender ::= BOOLEAN male Gender ::= TRUE female Gender ::= FALSE Typ wyliczeniowy ENUMERATED. Typ wyliczeniowy może przybierać jedynie wartości, które zostały określone w trakcie jego definicji. Składania typu ENUMERATED jest podobna do typu INTEGER. Przykład:

40 DayOfTheWeek ::=ENUMERATED { monday (1), tuesday (2), wednesday (3), thursday (4), friday (5), saturday (6), sunday (7) } Różnica pomiędzy typem ENUMERATED, a INTEGER sprowadza się do tego, że wartości typu ENUMERATED nie są uporządkowane. Z tego powodu poniższej konstrukcji (definiowania podtypu) nie da się powtórzyć z użyciem ENUMERATED: WeekDayNumber ::=INTEGER { monday (1), tuesday (2), wednesday (3), thursday (4), friday (5),saturday (6), sunday (7) } WorkingDayNumber ::=WeekDayNumber (1..5 ) Należy w tym celu użyc innego sposobu określenia podtypu: WorkingDay ::=DayOfTheWeek (monday tuesday wednesday thursday friday saturday sunday ) Porównajmy trzy przedstawione poniżej definicje typu DayOfTheWeek: (1) DayOfTheWeek ::= INTEGER { monday(1),tuesday(2),wednesday(3),

41 } thursday(4),friday(5),saturday(6), sunday(7) (2) DayOfTheWeek ::= INTEGER { monday(1),tuesday(2),wednesday(3), thursday(4),friday(5),saturday(6), sunday(7) }(1..7) (3) DayOfTheWeek ::=ENUMERATED { monday(1),tuesday(2),wednesday(3), thursday(4),friday(5),saturday(6), sunday(7) } Przypadek (1) umożliwia przypisanie definiowanemu typowi dowolnej wartości całkowitej, w przypadku (2) zakres wartości został przycięty do zakresu od 1 do 7, przypadek (3) uniemożliwia określenie kolejności w obrębie typu DayOfTheWeek. Typ REAL umożliwia posługiwanie się następującymi poprawnymi wartościami: +,-- oraz wartościami postaci, zapisywanymi w postaci M B *E, gdzie M i E mogą być dowolnymi wartościami typu INTEGER, zaś B może przyjmować jedynie wartości 2 lub 10. Przykład 1 (wg notacji z 1994):

42 pi REAL ::= { mantissa , base 10, exponent -5 } e REAL ::= { mantissa , base 10, exponent -23 } zero REAL ::= 0 topvalue REAL ::- PLUS-INFINITY buttomvalue REAL ::= MINIU-INFINITY Przykład 2 (wg notacji z 1990): pi REAL ::= { , 10, -5 } e REAL ::= { , 10, -23 } zero REAL ::= 0 topvalue REAL ::- PLUS-INFINITY buttomvalue REAL ::= MINIU-INFINITY Typ BIT STRING może przyjmować jako wartości uporządkowany ciąg 0 lub większej liczby bitów. Jego wartość ujęta jest w apostrofach i zakończona literą B, jeśli jest to ciąg 0 i 1 lub H, jeśli jest to ciąg zawierający cyfry od 0 do 9 i od A do F. Przykład 1: pi-decimals BIT STRING ::= ' 'B pi-decimals BIT STRING ::= '243F6A8885A308D313198A2E0370'H

43 Przy rozpatrywaniu kolejności uporzadkowania bitów należy trzymać się następującej konwencji: pierwszy bit jest najbardziej na lewo położonym bitem ciągu (bit numer 0), zaś ostatni bit jest najbardziej na prawo położonym bitem ciągu. Przykład 2: GenDer ::= BIT STRING StringOf32Bits ::= BIT STRING (SIZE (32)) Rights ::= BIT STRING { user-read(0), user-write(1), group-read(2), group-write(3), other-read(4), other-write(5) } group1 Rights ::= { group-read, group-write } Przykład 3: Characteristics ::= BIT STRING {gender(0),adult(1),blueeyed(2),caucasian(3)} (Zdefiniowano BIT STRING o dowolnej długości, ale nazwy przypisano tylko pierwszym czterem wartościom) Characteristics ::= BIT STRING {gender(0), adult(1),blueeyed(2),caucasian(3)} (SIZE (0..4)) (Jak wyżej, ale ciąg może mieć maksymalnie cztery bity). Characteristics ::= BIT STRING {gender(0),adult(1),blueeyed(2),caucasian(3)} (SIZE (4)) (Jak wyżej, ale ciąg musi mieć zawsze dokładnie cztery bity)

44 Podtypy (c.d.). Wspomniano już, że oprócz ograniczanai zakresu wartości typu INTEGER ten sam mechanizm można zastosować także do innych typów. Przykłady róznych podtypów przedstawiono w tabeli poniżej. Rodzaj podtypu Czego dotyczy Przykłądy Pojedyncza wartość Wszystkie typy RetirementAge ::=INTEGER (65) Zakres INTEGER i REAL AdultAge ::=INTEGER (15..MAX ) Child ::=INTEGER (1..14 ) Podtypy włączone Wszystkie typy Age ::=INTEGER (INCLUDES Child INCLUDES AdultAge ) Rozmiar zakresu SEQUENCE OF, SET OF i wszystkie typy ciągów Ograniczenie alfabetu Typy ciągów znakowych Wewnętrzne podtypy Lista kilku wartości podtypów SET, SET OF, SEQUENCE, SEQUENCE OF, CHOICE Line ::=General String (SIZE (1..80)) Couple ::=SET SIZE(2) OF Person OctalDigit ::=General String (FROM ("0" "1" "2" "3" "4" "5" "6" "7")) Person ::=CHOICE {Male,Female } Males ::=SET WITH Component (Male) OF Person Wszystkie typy Base ::=INTEGER ( )

45 Ograniczenia (aktualne ograniczenia podtypów wyspecyfikowane są jako komentarz Wszystkie typy ENCRYPTED {ToBeEnciphered } ::= BIT STRING (CONSTRAINED-BY { -- must be enciphermed using -- the DES encipherment -- standard }) Typ OCTET STRING. Ten typ definiuje ciąg o długości 0, 1 lub więcej oktetów. Stosuje się go często wtedy, gdy przesyłane są dane, określane zgodnie ze składnią odmienną od składni ASN.1, np. pliki GIF. Przykład: GifPicture :: = OCTET STRING Typ NULL jest type, którego jedyną dopuszczalną wartością może być null. Stosowany jest w celu wskazania miejsca dla typu, który zostanie zdefiniowany i dodany w przyszłości, lub używany jest razem z słowem OPTIONAL, oznaczającym występowanie lub niewystępowanie wartości, przy czym sam fakt wystąpienia lub nie wystąpienia niesie za sobą jakąś informację. Przykład: Prisoner ::=SEQUENCE { name GeneralString, dangerous NULL OPTIONAL } oznacza tyle samo, co zapis: Prisoner ::=SEQUENCE { name GeneralString, dangerous BOOLEAN }

46 Typy ciągów znakowych. W notacji ASN.1 zdefiniowano kilka typów ciągów znakowych, które opisują różne zbiory znaków. Typ ciągu znakowego Odpowiadający mu zbiór znaków NumericString " i spacja PrintableString a.. z, A.. Z, 0.. 9, spacja, ', (, ), +, -,,,., /, :, =,? TeletexString, T61String Zbiór znaków T.61 lub ISO 6937, wykorzystujący jeden lub dwa bajty do reprezentacji wiecej niż 256 różnych znaków, np. É jest zapisywany jako kombinacja dwóch znaków E VisibleString, Znaki drukowalne oraz spacja określone w ISO ISO646String 646, z wyłączeniem znaków kontrolnych, np. nowa linia i powrót karetki. IA5String GraphicString GeneralString UniversalString BMPString ISO 646, kody ASCII Może zawierać znaki z kilku różnych zbiorów znaków, korzystając z ISO 2022 do przełączania z jednego zbioru znaków w drugi. Może zawierać jedynie znaki drukowalne oraz spację, bez znaków formatujących. Tak samo jak GraphicString, ale dodatkowo może zawierać znaki formatujące Zbiór znaków wg ISO , zwany popularnie UNICODE (patrz wyżej) Podzbiór znaków wg ISO , tzw. Basic Multilingual Plane, pierwszych 2 16 znaków

47 UTF8String Podzbiór znaków wg ISO (patrz wyżej) Typy strukturalizowane. Typ strukturalizowany określa nowy typ jako kombinację jednego lub więcej typów już zdefiniowanych. Składnia Opis Przykłady SET Lista pól składowych, podobna do rekordu w bazie danych. Składowe mogą być dołączane w dowolnej kolejności oraz kolejność w jakiej przesyłane są te składowe nie niesie ze sobą żadnej wiadomości. Chairmen ::={ democratic-chairman General String, republican chairman General String } SEQUENCE SET OF Podobnie jak wprzypadku SET z tym, że składowe wysyłane są uporządkowane i przesyłane zgodnie z tym uporządkowaniem. Zero lub więcej składowych, wszystkie tego samego typu. Uporządkowanie składowych nie niesie żadnej informacji. SEQUENCE OF Podobnie jak SET OF, ale kolejność ma znaczenie CHOICE Przyjmuje wartość jednego spośród wylistowanych alternatywnych typów Ingredients ::={ peas REAL, eggs INTEGER } Ingredients ::=SET OF Ingredient Couple ::=SET SIZE (2) OF Person Chairmens ::= SET OF Chairmen Children ::=SET OF Person Vehicle ::=CHOICE { bus, Car, Bicycle }

48 W przypadku SET OF oraz SEQUENCE OF można wskazać, że jedna lub więcej składowych nie musi występować (są opcjonalne). Przykład: KnownParents ::=SEQUENCE OF { father Male OPTIONAL, mother Female OPTIONAL } Podtypy wewnętrzne. W przypadku typów strukturalizowanych można zdefiniować specjalne rodzaje podtypów, tzw. podtypy wewnętrzne. Pod tym pojęciem rozumiemy określenie jednego lub więcej podtypu składowej (składowych) typu strukturalizowanego. W przypadku konstrukcji SET OF lub SEQUENCE OF do określenia podtypu używa się sekwencji WITH COMPONENT. Przykład 1: Age ::= INTEGER People ::= SET OF Age Childen ::= AGE (WITH COMPONENT (1..14)) Przykład 2. Niech będzie dany typ: TextBlock ::= SEQUENCE OF VisibleString Chcemy użyć go do zdefiniowania adresu w paru liniach (wierszach), nie przekraczających 32 znaków (w wierszu). Możemy zrobić to tak: AddressBlock ::= TextBlock ( WITH COMPONENT (SIZE (1..32)) )

49 Jeśli typu TextBlock chcemy z kolei użyć do zdefiniowania bloku informacji, składających się jedynie z cyfr, to podtyp wewnętrzny ma postać: DigitBlock ::= TextBlock ( WITH COMPONENT (NumericString) ) Powyższe definicje równoważnie można zapisać tak: AddressBlock ::= SEQUENCE OF VisibleString (SIZE (1..32)) DigitBlock ::= SEQUENCE OF VisibleString (NumericString) Korzystając z typów SEQENCE i SET, które mogą zawierać składowe wielu różnych typów, potrzebujemy czasami ograniczenia typu każdego ze składowych. Czynimy to przy pomocy kwalifikatora WITH COMPONENTS (z S na końcu). Załóżmy, że jest dany typ: Quadruple ::= SEQUENCE { alpha ENUMERATED {state1, state2, state3}, beta IA5String OPTIONAL, gamma SEQUENCE OF INTEGER, delta BOOLEAN DEFAULT TRUE } Z tak zdefiniowanego typu podstawowego możemy wyprowadzić podtyp, którego składowa alpha równa jest state1, zaś składowa gamma posiada zawsze pięć elementów: Quadruple1 ::= Quadruple ( WITH COMPONENTS {..., alpha (state1),

50 ) gamma (SIZE (5))} Ten sam podtyp równoważnie można zdefiniować następująco: Quadruple1 ::= SEQUENCE { alpha ENUMERATED {state1, state2, state3} (state1), beta IA5String OPTIONAL, gamma SEQUENCE SIZE (5) OF INTEGER, delta BOOLEAN DEFAULT TRUE } Symbol trzech kropek "..." oznacza, że ograniczenie dotyczy tylko niektórych składowych i nie zmienia sensu definicji składowych, które nie pojawiły się na liście ograniczeń. Ograniczenie przy pomocy kwalifikatora WITH COMPONENTS można także ograniczać, posługując się słowami kluczowymi PRESENT i ABSENT, które mają wpływ odpowiednio na składowe oznaczone jako OPTIONAL lub DEAFULT. Przykład: Quadruple2 ::= Quadruple (WITH COMPONENTS { alpha (state1), beta (SIZE (5 12)) PRESENT, gamma (SIZE (5)), delta OPTIONAL } ) Typ CHOICE. Konstrukcja CHOICE stwarza możliwość wyboru pomiędzy kilkoma alternatywami. Przykłady: Afters ::= CHOICE {

51 } cheese [0] IA5String, dessert [1] IA5String Alternatywa oznaczona jest jako nazwa składowej, rozpoczynając asie z małej litery. Ponieważ nazwy pól nie są kodowane, to sytuacja ta mogłaby prowadzić niejednoznaczności (mamy dwa pola tego samego typu, otrzymaliśmy zakodowana wartość typu Afters, ale nie wiemy którą jego alternatywę cheese, czy też dessert). Aby ten problem rozwiązać, identyfikatory alternatyw typu CHOICE muszą być rozróżnialne: wystarczy poprzedzić typ alternatywy identyfikatorem pola liczbą całkowitą ujętą w nawiasy kwadratowe). Typ ANY stosowany jest do modelowania zmiennych, których typ nie jest zdefiniowany lub zdefiniowany gdzieś wcześniej, np. całkiem w innym module ASN.1. Dzięki ANY możemy w momencie definiowania typów pominąć szczegóły związane ze specyfikacją jakiegoś jego elementu, którego typ jest nieznany lub też element ten może być w zależności od kontekstu różnego typu. Definicje typów z użyciem ANY występują w dwóch postaciach: (1) Vehicle ::=ANY (2) SEQUENCE { type-of-vehicle INTEGER, vehicle ANY DEFINED BY type-of-vehicle }

52 Zapis postaci (1) wymaga, aby komputer odbierający wartość tego typu dokonał analizy, jaki format jest adekwatny do przesłanego typu ANY (zwykle musi z góry to założyć lub w informacje o tym umieścić w typie ANY). Przypadek (2), dzięki użyciu pola type-of-vehicle, dostarcza odbiorcy informacji o formacie typu ANY. Typem pola type-of-vehicle jest zwykle INTEGER lub OBJECT IDENTIFIER. Identyfikatory typu OBJECT IDENTIFIER (w skrócie OID) budowane są na bazie rejestracji w hierarchicznym drzewie nazw (określanego w skrócie drzewem nazw RH). Drzewo nazw RH jest drzewem, którego liście odpowiadają rejestrowanym obiektom, zaś nie-liście organom rejestracji, któremu poprzedzający go w hierarchii organ rejestracji przekazał uprawnienia w zakresie rejestracji w tej części poddrzewa nazw RH. Korzeń drzewa nazw RH jest zgodny z normą ISO/IEC [1]. Drzewo nazw RH musi być tak budowane, aby zarówno organy rejestracji, jak i rejestrowane przez nie obiekty posiadały unikalne identyfikatory. Przy takiej konstrukcji drzewa nazw RH identyfikator obiektu rejestrowanego przez organ rejestracji jest konkatenacją identyfikatora organu rejestracji i nazwy liścia wychodzącego z węzła, pod który podczepiony jest organ rejestracji. Identyfikatory OID nadawane są przez odpowiednie organy rejestracji. W Polsce rolę taką pełni Krajowy Rejestr Identyfikatorów Obiektów KRIO (

53 recommendation (0) pl (616) administration (1) other countries itu-t (0) question (2) networkoperator (3) us-public-datanetworks ( ) other countries' PDNs standard (0) pl (616) member-body (2) ISO/IEC (ITU-T X.600) iso (1) registrationauthority (1) other countries osinet (0004) identifiedorganisation (3) gosip (0005) us-dod (0006) joint iso-itu-t (2) country (16) other oiw (0014) other

54 Przykłady użycia słowa kluczowego SIZE MonthNumber ::= NumericString (SIZE (1..2)) MonthNumber ::= NumericString (SIZE (1 2)) Base ::=BIT STRING (SIZE ( )) Couple ::=SET SIZE(2)OF Human BridgeDeal ::=SET SIZE (13)OF PlayingCard BridgeHand ::=SET SIZE (0..13)OF PlayingCard linelength INTEGER ::= 80 Line ::= VisibleString (SIZE (0..lineLength) Znaczniki (ang. tags) Popatrzmy na następujące trzy przykłady: (1) Name ::=SEQUENCE { givenname [0] VisibleString OPTIONAL, surname [1] VisibleString OPTIONAL } (2) Name ::=SET { givenname [0] VisibleString, surname [1] VisibleString } (3)

55 Name ::=CHOICE { numericname NumericString, alphabeticname VisibleString } W przykładzie pierwszym (1) oba elementy są opcjonalne, Stąd konieczne są znaczniki [0] i [1], ponieważ odbiorca dostanie wiadomość, to na podstawie tych znaczników będzie w stanie rozróżnić, który z dwóch elementów otrzymał (w przypadku, gdy przyjdą oba elementy, to problemu tego nie ma). W przykładzie (2) znaczniki są niezbędne, ponieważ odbiorca będzie otrzymywał zawsze oba elementy typu SET, ale w dowolnej kolejności. Alternatywne składowe w typie CHOICE są różnego typu. Oznacza to, że w tym przypadku nie zachodzi konieczność umieszczenia znaczników składowych pól wystarcza znaczniki typów wbudowanych: NumericString i VisibleString. Znaczniki typów wbudowanych należą to grupy znaczników typu UNIVERSAL i przedstawione są w Tab.6. Znaczniki są etykietami stosowanymi w celu zróżnicowania typów. Znaczniki są konieczne w niektórych sytuacjach, chociaż mogą być używane wtedy, gdy takiej konieczności nie ma. Tabela 6. Znaczniki UNIVERSAL w ASN

56 Jerzy Pejaś: Standardy i Systemy Otwarte

57 Znaczniki posiadają dwie składowe: składową klasa oraz składową numer. W ASN.1 wyróżnia się cztery klasy znaczników, przedstawione w Tab.7. Tabela 7. Klasy znaczników w ASN.1 Klasa Przykład Opis univwersalna [UNIVERSAL 2] Opisuje typy, których znaczenie jest takie samo w dowolnym zastosowaniu (patrz Tab.6). zastosowania [APPLICATION 0] Opisuje typy, których znaczenie jest uzależnione od konkretnego zastosowania prywatna [PRIVATE 4] Umożliwia użytkownikowi definiowanie własnych rozszerzeń, których znaczenie nadawane jest przez użytkownika zorientowana kontekstowo [7] Ten znacznik ma znaczenie jedynie w bezpośrednim kontekście określonym przez konstrukcje SET, SEQUENCE i CHOICE. Jest to najlepszy w użyciu znacznik w przypadku, gdy UNIVERSAL jest niewystarczający. W wersji ASN.1 z 1994 roku wprowadzono piąty znacznik AUTOMATIC. Tak naprawdę nie jest to nowa klasa znaczników, ale jedynie określenie, że konkretna wartość znacznika powinna zostać automatycznie obliczona w momencie kompilacji kodu ASN.1. Przykłady: Name ::=SET { given name [0] VisibleString, surname [1] VisibleString }

58 PersonnelRecord ::=SET { name [0] Name, wage [1] INTEGER } Znaczniki jawne (ang. explicit) i niejawne (ang. implicit). Załóżmy, że zdefiniowano następujące typy: Name ::=SEQUENCE { givenname [0] VisibleString OPTIONAL, initials [1] VisibleString OPTIONAL, surname [2] VisibleString OPTIONAL } Jeśli typ ten zakodujemy w formacie BER, wówczas do odbiorcy będą wysyłane dwa znaczniki na każdy z elementów: najpierw znaczniki zorientowane kontekstowo [0], [1] i [2], a następnie znaczniki UNIVERSAL dla typu VisibleString. Aby tego uniknąć, przepiszmy powyższą definicję w postaci: Name ::=SEQUENCE { givenname [0] IMPLICIT VisibleString OPTIONAL, initials [1] IMPLICIT VisibleString OPTIONAL, surname [2] IMPLICIT VisibleString OPTIONAL } Słowo IMPLICIT określa, że wysyłane powinny być jedynie znaczniki [0], [1] i [2], zaś znaczniki UNIVERSAL pomijane

59 Modyfikator IMPLICIT można umieścić także w nagłówku modułu ASN.1. Oznacza to wówczas, że wszystkie znaczniki (tam gdzie jest to możliwe) są niejawne (IMPLICIT), nawet jeśli tego wyraźnie nie zaznaczono.. Nagłówek modułu ASN.1 może mieć postać: DEFINITIONS ::= --Implies Explicit tags DEFINITIONS IMPLICIT TAGS ::= DEFINITIONS EXPLICIT TAGS ::= DEFINITIONS AUTOMATIC TAGS ::= (wer. ASN.1 94) Jeśli moduł jest typ IMPLICIT TAGS, to jeśli konieczne są jawne znaczniki w tekście, wówczas należy z danym polem związać kwalifikator EXPLICIT. Moduł w ASN.1 jest nazwaną kolekcją (zbiorem) typów ASN.1 i definicji wartości. Struktura modułu jest następująca: <modulereference><obj-id >DEFINITIONS <tag-defaults>::= BEGIN EXPORTS <type and value references>; IMPORTS <type and value references> FROM <modulereference><obj-id>;... <type and value definitions>... END Kwalifikatory EXPORTS lub IMPORTS... FROM umożliwiają odpowiednio udostępnienie niektórych lub wszystkich typów zdefiniowanych w module lub odwołanie się do typó zdefiniowanych w innych modułach. Przykład 1:

60 WeatherReporting { } DEFINITIONS EXPLICIT TAGS ::= BEGIN WeatherReport ::= SEQUENCE { height [0] IMPLICIT REAL, weather [1] IMPLICIT Wrecord } Wrecord ::= [APPLICATION 3 ] SEQUENCE { temp Temperature, moist Moisture wspeed [0] Windspeed OPTIONAL } Temperature ::= [APPLICATION 0] IMPLICIT REAL Moisture ::= [APPLICATION 1 ] REAL Windspeed ::= [APPLICATION 2 ] REAL END --of module WeatherReporting Przykład 2: CargoHandling { } DEFINITIONS EXPLICIT TAGS ::= BEGIN EXPORTS Box, Container; Box ::=SEQUENCE { height INTEGER,--in centimeters width INTEGER,--in centimeters length INTEGER --in centimeters } Container ::=SEQUENCE { weight INTEGER,--in kilograms volume Box }

61 END --of CargoHandling Przykład 3: TrainCargo { }DEFINITIONS EXPLICIT TAGS ::= BEGIN IMPORTS Box,Container FROM CargoHandling { }; TrainContainer ::= Container (WITH COMPONENTS { weight ( ), volume } ) Carriage ::= SET SIZE (2..4)OF Container END --of TrainCargo Przykład 4 (z PKCS#10): PKCS-10 {iso(1) member-body(2) us(840) rsadsi(113549) pkcs(1) pkcs-10(10) modules(1) pkcs-10(1)} DEFINITIONS IMPLICIT TAGS ::= BEGIN -- EXPORTS All: all types and values defined in this -- module are exported for use in other ASN.1 modules. IMPORTS informationframework, authenticationframework FROM UsefulDefinitions { usefuldefinitions } Attribute, Name FROM InformationFramework { informationframework}

62 pkcs-9 FROM CertificateExtensions {certificateextensions} id-extensionreq FROM EnrollmentMessageSyntax {enrollmentmessagesyntax} DirectoryString FROM SelectedAttributeTypes {selectedattributetypes} AlgorithmIdentifier, SubjectPublicKeyInfo, Extensions FROM AuthenticationFramework {authenticationframework}; -- Certificate requests CertificationRequestInfo ::= SEQUENCE { version INTEGER { v1(0) }, subject Name, subjectpkinfo SubjectPublicKeyInfo, attributes [0] Attributes } Attributes ::= SET OF Attribute CertificationRequest ::= SEQUENCE { certificationrequestinfo CertificationRequestInfo, signaturealgorithm AlgorithmIdentifier, signature BIT STRING } ExtensionRequest ::= Extensions -- Dodane z PKCS# r. -- pkcs-9-at-extensionrequest == id-extensionreq

63 pkcs-9-at-unstructedname OBJECT IDENTIFIER ::= { pkcs-9 2 } UnstructuredName ::= PKCS9String PKCS9String ::= CHOICE { ia5string IA5String, directorystring DirectoryString } END Reguły kodowania Podstawowe Reguły Kodowani (Basic Encoding Rules, BER) jest najszerzej stosowanym formatem kodowania opisów specyfikacji w ASN.1. BER bazuje na formacie TLV (tag-length-value), o którym była już mowa. Na rys.1 przedstawiono przykład kodowania BER. Rys.1 Kodowanie TLV w BER

64 Pole znacznika lub identyfikatora. Pierwsze dwa bity znacznika (bit 8 i 7, bity numerujemy od 1) określają klasę znacznika, przy czym 00 znacznik UNIVERSAL, 01 znacznik APPLICATION, 10 znacznik zorientowany kontekstowo, 11 znacznik PRIVATE (patrz rys.2). Trzeci bit równy jest 0 w przypadku kodowania typu prostego, zaś 1 w przypadku typu złożonego. Jeśli numer znacznika jest z przedziału od 0 do 30, to jest kodowany na pozostałych pięciu bitach (ang. one-octet-variant, patrz rys.3). Jeśli numer znacznika jest wiekszy niż 30, to wtedy pozostałe 5 bitów pierwszego oktetu ustawionych jest na 1, zaś numer znacznika kodowany jest na ostatnich 7 bitach jednego lub większej liczbie oktetów, występujących po oktecie czołowym (ang. multiple-octet-variant, patrz rys.3). Pierwszy bit (bit 8) każdego takiego następnego oktetu jest równy 1, chyba że jest ostatnim oktetem w sekwencji). Rys.2 Kodowanie klas w oktetach

65 Rys.3 Kodowanie znacznika w BER Kodowanie długości pola w BER. Zgodnie z rys.4, pole długości w BER ma także postać krótką (jedno bajtową, ang. short form) i postać (wielobajtowa, ang. long form). Postać krótka ma pierwszy bit (bit nr 8) ustawiony na 0, zaś pozostałe 7 bitów może zawierać wartość długości pola w bajtach (długość z przedziału od 0 do 127). W przypadku postaci długiej, bit pierwszy jest ustawiony na 1, zaś pozostałe 7 bitów pierwszego oktetu określa liczbę dodatkowych oktetów. Wartość długości pola w bajtach kodowana jest na wszystkich bitach dodatkowych oktetów

66 Rys.4 Kodowanie długości w BER Stosowana jest także tzw. postać nieograniczona (ang. unlimited form). Rozpoczyna się od oktetu z pierwszym bitem ustawionym na 1, a pozostałymi na 0 i kończy się oktetem z wszystkimi bitami ustawionymi na 0. Inaczej mówiąc, postać nieograniczona (ang. unlimited form) zaczyna się oktetem o wartości 80H, a kończy 00H (H oznacza liczbę szesnastkową). Postać nieograniczona jest zawsze postacią złożoną, tzn. jej wartość musi być zapisana w postaci TLV. Oktety wartości BER. W Tab.8 pokazane są przykłady kodów BER dla różnych typów danych. Warianty kodowania napisów z wykorzystaniem znaczników. Na rys.5 przedstawiono przykłady kodowania znaków z wykorzystaniem i bez wykorzystania poprzedzających je znaczników zorientowanych kontekstowo. Przykład kodowania SEQUENCE. Dany jest opis w ASN.1 typu o postaci:

67 HeadOfState ::=[APPLICATION 17 ] SEQUENCE { name IA5STRING, type ENUMERATED { president (0), emperor (1), king (2)}, birthyear INTEGER OPTIIONAL } Tabela 8. Oktety wartości BER

68 Jerzy Pejaś: Standardy i Systemy Otwarte

Laboratorium 1. Wprowadzenie do protokołu SNMP i kodowanie BER (ASN.1)

Laboratorium 1. Wprowadzenie do protokołu SNMP i kodowanie BER (ASN.1) Laboratorium 1. Wprowadzenie do protokołu SNMP i kodowanie BER (ASN.1) Celem laboratorium jest poznanie przez studenta podstawowego sposobu kodowania (BER), który jest wykorzystywany przez protokół SNMP.

Bardziej szczegółowo

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

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych: Zmienna i typ Pascal typy danych Zmienna to obiekt, który może przybierać różne wartości. Typ zmiennej to zakres wartości, które może przybierać zmienna. Deklarujemy je w nagłówku poprzedzając słowem kluczowym

Bardziej szczegółowo

Komunikacja człowiek-komputer

Komunikacja człowiek-komputer Komunikacja człowiek-komputer Wykład 3 Dr inż. Michał Kruk Komunikacja człowiek - komputer dr inż. Michał Kruk Reprezentacja znaków Aby zakodować tekst, trzeba każdej możliwej kombinacji bitów przyporządkować

Bardziej szczegółowo

Pracownia Komputerowa wyk ad VII

Pracownia Komputerowa wyk ad VII Pracownia Komputerowa wyk ad VII dr Magdalena Posiada a-zezula Magdalena.Posiadala@fuw.edu.pl http://www.fuw.edu.pl/~mposiada Magdalena.Posiadala@fuw.edu.pl 1 Notacja szesnastkowa - przypomnienie Szesnastkowy

Bardziej szczegółowo

Zarządzanie sieciami komputerowymi - wprowadzenie

Zarządzanie sieciami komputerowymi - wprowadzenie Zarządzanie sieciami komputerowymi - wprowadzenie Model zarządzania SNMP SNMP standardowy protokół zarządzania w sieci Internet stosowany w dużych sieciach IP (alternatywa logowanie i praca zdalna w każdej

Bardziej szczegółowo

Kodowanie informacji. Przygotował: Ryszard Kijanka

Kodowanie informacji. Przygotował: Ryszard Kijanka Kodowanie informacji Przygotował: Ryszard Kijanka Komputer jest urządzeniem służącym do przetwarzania informacji. Informacją są liczby, ale także inne obiekty, takie jak litery, wartości logiczne, obrazy

Bardziej szczegółowo

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu Programowanie strukturalne Opis ogólny programu w Turbo Pascalu STRUKTURA PROGRAMU W TURBO PASCALU Program nazwa; } nagłówek programu uses nazwy modułów; } blok deklaracji modułów const } blok deklaracji

Bardziej szczegółowo

Przykładowy dokument XML

Przykładowy dokument XML Przykładowy dokument XML DTD - wady Ograniczona kontrola nad strukturą dokumentów. Zbyt wysokopoziomowe typy danych: liczby, daty są zawsze reprezentowane jako tekst! Bardzo ogólne metody definiowania

Bardziej szczegółowo

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

Podstawy programowania skrót z wykładów: Podstawy programowania skrót z wykładów: // komentarz jednowierszowy. /* */ komentarz wielowierszowy. # include dyrektywa preprocesora, załączająca biblioteki (pliki nagłówkowe). using namespace

Bardziej szczegółowo

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna Dane, informacja, programy Kodowanie danych, kompresja stratna i bezstratna DANE Uporządkowane, zorganizowane fakty. Główne grupy danych: tekstowe (znaki alfanumeryczne, znaki specjalne) graficzne (ilustracje,

Bardziej szczegółowo

Pracownia komputerowa. Dariusz Wardecki, wyk. VIII

Pracownia komputerowa. Dariusz Wardecki, wyk. VIII Pracownia komputerowa Dariusz Wardecki, wyk. VIII Powtórzenie Podaj wartość liczby przy następującej reprezentacji zmiennoprzecinkowej (Kc = 7) Z C C C C M M M 1 0 1 1 1 1 1 0-1.75 (dec) Rafa J. Wysocki

Bardziej szczegółowo

Języki programowania zasady ich tworzenia

Języki programowania zasady ich tworzenia Strona 1 z 18 Języki programowania zasady ich tworzenia Definicja 5 Językami formalnymi nazywamy każdy system, w którym stosując dobrze określone reguły należące do ustalonego zbioru, możemy uzyskać wszystkie

Bardziej szczegółowo

Załącznik nr 2 do Umowy Nr. o korzystanie z usługi Identyfikacji Przychodzących Płatności Masowych z dnia.

Załącznik nr 2 do Umowy Nr. o korzystanie z usługi Identyfikacji Przychodzących Płatności Masowych z dnia. Załącznik nr 2 do Umowy Nr. o korzystanie z usługi Identyfikacji Przychodzących Płatności Masowych z dnia. Informacja o strukturze pliku, przekazywanego przez Bank dla Klienta za pośrednictwem systemu

Bardziej szczegółowo

MATERIAŁY DO ZAJĘĆ II

MATERIAŁY DO ZAJĘĆ II MATERIAŁY DO ZAJĘĆ II Zmienne w C# Spis treści I. Definicja zmiennej II. Hierarchia typów (CTS) III. Typy wbudowane IV. Deklaracja zmiennych V. Literały VI. Pobieranie i wypisywanie wartości zmiennych

Bardziej szczegółowo

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych

Języki i metodyka programowania. Reprezentacja danych w systemach komputerowych Reprezentacja danych w systemach komputerowych Kod (łac. codex - spis), ciąg składników sygnału (kombinacji sygnałów elementarnych, np. kropek i kresek, impulsów prądu, symboli) oraz reguła ich przyporządkowania

Bardziej szczegółowo

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

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Informatyka I Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki Politechnika Warszawska Wydział Transportu 2019 1 Plan wykładu

Bardziej szczegółowo

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

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Programowanie w C++ Wykład 2 Katarzyna Grzelak 4 marca 2019 K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44 Na poprzednim wykładzie podstawy C++ Każdy program w C++ musi mieć funkcję o nazwie main Wcięcia

Bardziej szczegółowo

Programowanie w języku Python. Grażyna Koba

Programowanie w języku Python. Grażyna Koba Programowanie w języku Python Grażyna Koba Kilka definicji Program komputerowy to ciąg instrukcji języka programowania, realizujący dany algorytm. Język programowania to zbiór określonych instrukcji i

Bardziej szczegółowo

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

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład Funkcje Krzysztof Banaś Podstawy programowania 1 Programowanie proceduralne Pojęcie procedury (funkcji) programowanie proceduralne realizacja określonego zadania specyfikacja

Bardziej szczegółowo

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie Część X C++ Typ znakowy służy do reprezentacji pojedynczych znaków ASCII, czyli liter, cyfr, znaków przestankowych i innych specjalnych znaków widocznych na naszej klawiaturze (oraz wielu innych, których

Bardziej szczegółowo

Pracownia Komputerowa wykład IV

Pracownia Komputerowa wykład IV Pracownia Komputerowa wykład IV dr Magdalena Posiadała-Zezula http://www.fuw.edu.pl/~mposiada/pk16 1 Reprezentacje liczb i znaków! Liczby:! Reprezentacja naturalna nieujemne liczby całkowite naturalny

Bardziej szczegółowo

Podstawy i języki programowania

Podstawy i języki programowania Podstawy i języki programowania Laboratorium 2 - wprowadzenie do zmiennych mgr inż. Krzysztof Szwarc krzysztof@szwarc.net.pl Sosnowiec, 23 października 2017 1 / 26 mgr inż. Krzysztof Szwarc Podstawy i

Bardziej szczegółowo

29. Poprawność składniowa i strukturalna dokumentu XML

29. Poprawność składniowa i strukturalna dokumentu XML 29. i strukturalna dokumentu XML 13 października 2015 1 2 Poprawny składniowo dokument XML powinien być tworzony zgodnie z poniżej przedstawionymi zasadami. Deklaracja XML Powinien zawierać deklarację

Bardziej szczegółowo

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

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze Podstawy Informatyki Metalurgia, I rok Wykład 3 Liczby w komputerze Jednostki informacji Bit (ang. bit) (Shannon, 1948) Najmniejsza ilość informacji potrzebna do określenia, który z dwóch równie prawdopodobnych

Bardziej szczegółowo

Model sieci OSI, protokoły sieciowe, adresy IP

Model sieci OSI, protokoły sieciowe, adresy IP Model sieci OSI, protokoły sieciowe, adresy IP Podstawę działania internetu stanowi zestaw protokołów komunikacyjnych TCP/IP. Wiele z używanych obecnie protokołów zostało opartych na czterowarstwowym modelu

Bardziej szczegółowo

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. ABAP/4 Instrukcja IF Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek]. [ELSEIF warunek. ] [ELSE. ] ENDIF. gdzie: warunek dowolne wyrażenie logiczne o wartości

Bardziej szczegółowo

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI Dr inż. Grażyna KRUPIŃSKA Grazyna.Krupinska@fis.agh.edu.pl D-10 pokój 227 WYKŁAD 2 WSTĘP DO INFORMATYKI Ćwiczenia i laboratorium 2 Kolokwia zaliczeniowe - 1 termin - poniedziałek, 29 stycznia 2018 11:30

Bardziej szczegółowo

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

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10). Wprowadzenie do inżynierii przetwarzania informacji. Ćwiczenie 1. Systemy liczbowe Cel dydaktyczny: Poznanie zasad reprezentacji liczb w systemach pozycyjnych o różnych podstawach. Kodowanie liczb dziesiętnych

Bardziej szczegółowo

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Jak napisać program obliczający pola powierzchni różnych figur płaskich? Część IX C++ Jak napisać program obliczający pola powierzchni różnych figur płaskich? Na początku, przed stworzeniem właściwego kodu programu zaprojektujemy naszą aplikację i stworzymy schemat blokowy

Bardziej szczegółowo

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h> Szablon programu: /* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include /* opcjonalne: deklaracja typów o rozmiarze jednego i dwóch

Bardziej szczegółowo

1. Wprowadzanie danych z klawiatury funkcja scanf

1. Wprowadzanie danych z klawiatury funkcja scanf 1. Wprowadzanie danych z klawiatury funkcja scanf Deklaracja int scanf ( const char *format, wskaźnik, wskaźnik,... ) ; Biblioteka Działanie stdio.h Funkcja scanf wczytuje kolejne pola (ciągi znaków),

Bardziej szczegółowo

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

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika: PRZYPOMNIJ SOBIE! Matematyka: Dodawanie i odejmowanie "pod kreską". Elektronika: Sygnały cyfrowe. Zasadę pracy tranzystorów bipolarnych i unipolarnych. 12. Wprowadzenie 12.1. Sygnały techniki cyfrowej

Bardziej szczegółowo

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

Tablice (jedno i wielowymiarowe), łańcuchy znaków Tablice (jedno i wielowymiarowe), łańcuchy znaków wer. 8 z drobnymi modyfikacjami! Wojciech Myszka Katedra Mechaniki i Inżynierii Materiałowej 2017-04-07 09:35:32 +0200 Zmienne Przypomnienie/podsumowanie

Bardziej szczegółowo

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH Michał Bujacz bujaczm@p.lodz.pl B9 Lodex 207 godziny przyjęć: środy i czwartki 10:00-11:00 http://www.eletel.p.lodz.pl/bujacz/ 1 Pytania weryfikacyjne:

Bardziej szczegółowo

1 Podstawy c++ w pigułce.

1 Podstawy c++ w pigułce. 1 Podstawy c++ w pigułce. 1.1 Struktura dokumentu. Kod programu c++ jest zwykłym tekstem napisanym w dowolnym edytorze. Plikowi takiemu nadaje się zwykle rozszerzenie.cpp i kompiluje za pomocą kompilatora,

Bardziej szczegółowo

Struktura pliku wejściowego ipko biznes przelewy zagraniczne (MT103 / CSV)

Struktura pliku wejściowego ipko biznes przelewy zagraniczne (MT103 / CSV) Struktura pliku wejściowego ipko biznes przelewy zagraniczne (T103 / CSV) 1 Spis treści 1. Informacje ogólne... 3 2. Struktura pliku PLA/T103... 3 2.1. Opis formatu pliku... 3 2.2. Struktura pliku... 4

Bardziej szczegółowo

Zestaw ten opiera się na pakietach co oznacza, że dane podczas wysyłania są dzielone na niewielkie porcje. Wojciech Śleziak

Zestaw ten opiera się na pakietach co oznacza, że dane podczas wysyłania są dzielone na niewielkie porcje. Wojciech Śleziak Protokół TCP/IP Protokół TCP/IP (Transmission Control Protokol/Internet Protokol) to zestaw trzech protokołów: IP (Internet Protokol), TCP (Transmission Control Protokol), UDP (Universal Datagram Protokol).

Bardziej szczegółowo

Algorytmy i struktury danych. wykład 1

Algorytmy i struktury danych. wykład 1 Plan całego wykładu:. Pojęcie algorytmu, projektowanie wstępujące i zstępujące, rekurencja. Klasy algorytmów. Poprawność algorytmu, złożoność obliczeniowa. Wskaźniki, dynamiczne struktury danych: listy,

Bardziej szczegółowo

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH reprezentacja danych ASK.RD.01 c Dr inż. Ignacy Pardyka UNIWERSYTET JANA KOCHANOWSKIEGO w Kielcach Rok akad. 2011/2012 1 2 Standardy reprezentacji wartości całkowitoliczbowych

Bardziej szczegółowo

Autor: dr inż. Katarzyna Rudnik

Autor: dr inż. Katarzyna Rudnik Bazy danych Wykład 2 MS Access Obiekty programu, Reprezentacja danych w tabeli, Indeksy, Relacje i ich sprzężenia Autor: dr inż. Katarzyna Rudnik Obiekty programu MS ACCESS Obiekty typu Tabela są podstawowe

Bardziej szczegółowo

Typy, klasy typów, składnie w funkcji

Typy, klasy typów, składnie w funkcji Typy, klasy typów, składnie w funkcji Typy w Haskell Każde wyrażenie w Haskell posiada zdefiniowany typ. Dzięki temu już na etapie kompilacji kodu następuje sprawdzenie poprawności kodu i zabezpiecza nas

Bardziej szczegółowo

Pracownia Komputerowa wyk ad IV

Pracownia Komputerowa wyk ad IV Pracownia Komputerowa wykad IV dr Magdalena Posiadaa-Zezula Magdalena.Posiadala@fuw.edu.pl http://www.fuw.edu.pl/~mposiada Magdalena.Posiadala@fuw.edu.pl 1 Reprezentacje liczb i znaków Liczby: Reprezentacja

Bardziej szczegółowo

Pracownia Komputerowa wykład VI

Pracownia Komputerowa wykład VI Pracownia Komputerowa wykład VI dr Magdalena Posiadała-Zezula http://www.fuw.edu.pl/~mposiada 1 Przypomnienie 125 (10) =? (2) Liczby całkowite : Operacja modulo % reszta z dzielenia: 125%2=62 reszta 1

Bardziej szczegółowo

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego

Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego Arytmetyka cyfrowa Dla człowieka naturalnym sposobem liczenia jest korzystanie z systemu dziesiętnego, dla komputera natomiast korzystanie z zapisu dwójkowego (binarnego). Zapis binarny - to system liczenia

Bardziej szczegółowo

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak: Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak: accept - typy zawartości MIME akceptowane przez serwer (opcjonalny) accept-charset - zestaw znaków akceptowanych

Bardziej szczegółowo

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

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02 METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE Wykład 02 NAJPROSTSZY PROGRAM /* (Prawie) najprostszy przykład programu w C */ /*==================*/ /* Między tymi znaczkami można pisać, co się

Bardziej szczegółowo

Wstęp do programowania. Różne różności

Wstęp do programowania. Różne różności Wstęp do programowania Różne różności Typy danych Typ danych określa dwie rzeczy: Jak wartości danego typu są określane w pamięci Jakie operacje są dozwolone na obiektach danego typu 2 Rodzaje typów Proste

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Liczby w jaki sposób komputery je widzą? Opracował: Andrzej Nowak Bibliografia: CPA: PROGRAMMING ESSENTIALS IN C++ https://www.netacad.com Czy wiesz, jak komputery wykonują

Bardziej szczegółowo

Java Podstawy. Michał Bereta

Java Podstawy. Michał Bereta Prezentacja współfinansowana przez Unię Europejską ze środków Europejskiego Funduszu Społecznego w ramach projektu Wzmocnienie znaczenia Politechniki Krakowskiej w kształceniu przedmiotów ścisłych i propagowaniu

Bardziej szczegółowo

Pracownia Komputerowa wykład V

Pracownia Komputerowa wykład V Pracownia Komputerowa wykład V dr Magdalena Posiadała-Zezula http://www.fuw.edu.pl/~mposiada/pk16 1 Reprezentacje liczb i znaków! Liczby:! Reprezentacja naturalna nieujemne liczby całkowite naturalny system

Bardziej szczegółowo

Akademia Techniczno-Humanistyczna w Bielsku-Białej

Akademia Techniczno-Humanistyczna w Bielsku-Białej Akademia Techniczno-Humanistyczna w Bielsku-Białej Wydział Budowy Maszyn i Informatyki Laboratorium z sieci komputerowych Ćwiczenie numer: 1 Temat ćwiczenia: Adresacja w sieciach komputerowych podstawowe

Bardziej szczegółowo

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2]

Rys.2.1. Trzy warstwy stanowiące podstawę popularnego podejścia w zakresie budowy stron internetowych [2] 1. CEL ĆWICZENIA Celem ćwiczenia jest przedstawienie możliwości wykorzystania języka JavaScript do tworzenia interaktywnych aplikacji działających po stronie klienta. 2. MATERIAŁ NAUCZANIA JavaScript tak

Bardziej szczegółowo

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

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre) Uwagi dotyczące notacji kodu! Wyrazy drukiem prostym -- słowami języka VBA. Wyrazy drukiem pochyłym -- inne fragmenty kodu. Wyrazy w [nawiasach kwadratowych] opcjonalne fragmenty kodu (mogą być, ale nie

Bardziej szczegółowo

Typy danych, zmienne i tablice. Tomasz Borzyszkowski

Typy danych, zmienne i tablice. Tomasz Borzyszkowski Typy danych, zmienne i tablice Tomasz Borzyszkowski Silne typy Javy Java jest językiem wyposażonym w silny system typów. Wywodzi się stąd siła i bezpieczeństwo tego języka. Co to znaczy silny system typów?

Bardziej szczegółowo

Wstęp do programowania

Wstęp do programowania Wstęp do programowania wykład 2 Piotr Cybula Wydział Matematyki i Informatyki UŁ 2012/2013 http://www.math.uni.lodz.pl/~cybula Język programowania Każdy język ma swoją składnię: słowa kluczowe instrukcje

Bardziej szczegółowo

Wykład 8: klasy cz. 4

Wykład 8: klasy cz. 4 Programowanie obiektowe Wykład 8: klasy cz. 4 Dynamiczne tworzenie obiektów klas Składniki statyczne klas Konstruktor i destruktory c.d. 1 dr Artur Bartoszewski - Programowanie obiektowe, sem. 1I- WYKŁAD

Bardziej szczegółowo

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość.

Typ użyty w deklaracji zmiennej decyduje o rodzaju informacji, a nazwa zmiennej symbolicznie opisuje wartość. Typy danych Aby zapisać w komputerze jakąś daną, trzeba zapamiętać trzy jej podstawowe cechy: miejsce przechowywania informacji, przechowywaną wartość, rodzaj przechowywanej wartości. Typ użyty w deklaracji

Bardziej szczegółowo

Podstawy Informatyki

Podstawy Informatyki Podstawy Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 5 Bożena Woźna-Szcześniak (AJD) Podstawy Informatyki Wykład 5 1 / 23 LICZBY RZECZYWISTE - Algorytm Hornera

Bardziej szczegółowo

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j

Według raportu ISO z 1988 roku algorytm JPEG składa się z następujących kroków: 0.5, = V i, j. /Q i, j Kompresja transformacyjna. Opis standardu JPEG. Algorytm JPEG powstał w wyniku prac prowadzonych przez grupę ekspertów (ang. Joint Photographic Expert Group). Prace te zakończyły się w 1991 roku, kiedy

Bardziej szczegółowo

PROTOKOŁY OBSŁUGI POCZTY ELEKTRONICZNEJ

PROTOKOŁY OBSŁUGI POCZTY ELEKTRONICZNEJ PROTOKOŁY OBSŁUGI POCZTY ELEKTRONICZNEJ Poczta elektroniczna służy do przesyłania komunikatów tekstowych, jak również dołączonych do nich informacji nietekstowych (obraz, dźwięk) pomiędzy użytkownikami

Bardziej szczegółowo

Dodatek Technologie internetowe 1. UTF-8 wg 2. Adresy URL

Dodatek Technologie internetowe   1. UTF-8 wg 2. Adresy URL Dodatek Technologie internetowe http://pl.wikipedia.org/wiki/utf-8 1. UTF-8 wg 2. Adresy URL 1 Dodatek Technologie internetowe http://pl.wikipedia.org/wiki/utf-8 1. UTF-8 2 Zalety i wady Zalety 1. KaŜdy

Bardziej szczegółowo

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki

Programowanie C++ Wykład 2 - podstawy języka C++ dr inż. Jakub Możaryn. Warszawa, Instytut Automatyki i Robotyki Wykład 2 - podstawy języka C++ Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu. Zmienne i ich nazwy, podstawowe typy: całkowite, rzeczywiste, znakowe i napisowe. Instrukcje:

Bardziej szczegółowo

Stan wysoki (H) i stan niski (L)

Stan wysoki (H) i stan niski (L) PODSTAWY Przez układy cyfrowe rozumiemy układy, w których w każdej chwili występują tylko dwa (zwykle) możliwe stany, np. tranzystor, jako element układu cyfrowego, może być albo w stanie nasycenia, albo

Bardziej szczegółowo

Systemy liczbowe używane w technice komputerowej

Systemy liczbowe używane w technice komputerowej Systemy liczbowe używane w technice komputerowej Systemem liczenia nazywa się sposób tworzenia liczb ze znaków cyfrowych oraz zbiór reguł umożliwiających wykonywanie operacji arytmetycznych na liczbach.

Bardziej szczegółowo

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

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory Poniżej pozwoliłem sobie za cytować za wikipedią definicję zmiennej w informatyce.

Bardziej szczegółowo

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1

Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie. Krzysztof Banaś Podstawy programowania 1 Podstawy programowania. Wykład 6 Złożone typy danych: struktury, unie Krzysztof Banaś Podstawy programowania 1 są sposobem na przechowywanie w ramach pojedynczej zmiennej zestawu zmiennych różnych typów,

Bardziej szczegółowo

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

Powtórka algorytmów. Wprowadzenie do języka Java. Powtórka algorytmów. Wprowadzenie do języka Java. BEGIN Readln(a); Readln(b); Suma := 0; IF Suma < 10 THEN Writeln( Suma wynosi:, Suma); ELSE Writeln( Suma większa niż 10! ) END. 1. Narysować schemat blokowy

Bardziej szczegółowo

INFORMATYKA Studia Niestacjonarne Elektrotechnika

INFORMATYKA Studia Niestacjonarne Elektrotechnika INFORMATYKA Studia Niestacjonarne Elektrotechnika Wydział Elektrotechniki i Informatyki dr inż. Michał Łanczont Wydział Elektrotechniki i Informatyki p. E419 tel. 81-538-42-93 m.lanczont@pollub.pl http://lanczont.pollub.pl

Bardziej szczegółowo

Pracownia Komputerowa wyk ad VI

Pracownia Komputerowa wyk ad VI Pracownia Komputerowa wyk ad VI dr Magdalena Posiada a-zezula Magdalena.Posiadala@fuw.edu.pl http://www.fuw.edu.pl/~mposiada Magdalena.Posiadala@fuw.edu.pl 1 Przypomnienie 125 (10) =? (2) Liczby ca kowite

Bardziej szczegółowo

Arytmetyka komputera

Arytmetyka komputera Arytmetyka komputera Systemy zapisu liczb System dziesiętny Podstawą układu dziesiętnego jest liczba 10, a wszystkie liczby można zapisywać dziesięcioma cyframi: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9. Jednostka

Bardziej szczegółowo

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu.

Niezwykłe tablice Poznane typy danych pozwalają przechowywać pojedyncze liczby. Dzięki tablicom zgromadzimy wiele wartości w jednym miejscu. Część XIX C++ w Każda poznana do tej pory zmienna może przechowywać jedną liczbę. Jeśli zaczniemy pisać bardziej rozbudowane programy, okaże się to niewystarczające. Warto więc poznać zmienne, które mogą

Bardziej szczegółowo

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

ARYTMETYKA BINARNA. Dziesiątkowy system pozycyjny nie jest jedynym sposobem kodowania liczb z jakim mamy na co dzień do czynienia. ARYTMETYKA BINARNA ROZWINIĘCIE DWÓJKOWE Jednym z najlepiej znanych sposobów kodowania informacji zawartej w liczbach jest kodowanie w dziesiątkowym systemie pozycyjnym, w którym dla przedstawienia liczb

Bardziej szczegółowo

Technologie Informacyjne

Technologie Informacyjne System binarny Szkoła Główna Służby Pożarniczej Zakład Informatyki i Łączności October 7, 26 Pojęcie bitu 2 Systemy liczbowe 3 Potęgi dwójki 4 System szesnastkowy 5 Kodowanie informacji 6 Liczby ujemne

Bardziej szczegółowo

Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów

Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów Architektura systemów komputerowych Laboratorium 5 Kodowanie liczb i tekstów Marcin Stępniak Informacje. Kod NKB Naturalny kod binarny (NKB) jest oparty na zapisie liczby naturalnej w dwójkowym systemie

Bardziej szczegółowo

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE

INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Studia podyplomowe dla nauczycieli INFORMATYKA, TECHNOLOGIA INFORMACYJNA ORAZ INFORMATYKA W LOGISTYCE Przedmiot JĘZYKI PROGRAMOWANIA DEFINICJE I PODSTAWOWE POJĘCIA Autor mgr Sławomir Ciernicki 1/7 Aby

Bardziej szczegółowo

Wstęp do informatyki- wykład 2

Wstęp do informatyki- wykład 2 MATEMATYKA 1 Wstęp do informatyki- wykład 2 Systemy liczbowe Treści prezentowane w wykładzie zostały oparte o: S. Prata, Język C++. Szkoła programowania. Wydanie VI, Helion, 2012 www.cplusplus.com Jerzy

Bardziej szczegółowo

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy

Wprowadzenie do informatyki i użytkowania komputerów. Kodowanie informacji System komputerowy 1 Wprowadzenie do informatyki i użytkowania komputerów Kodowanie informacji System komputerowy Kodowanie informacji 2 Co to jest? bit, bajt, kod ASCII. Jak działa system komputerowy? Co to jest? pamięć

Bardziej szczegółowo

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

Powtórka algorytmów. Wprowadzenie do języka Java. Powtórka algorytmów. Wprowadzenie do języka Java. Przypomnienie schematów blokowych BEGIN Readln(a); Readln(b); Suma := 0; IF Suma < 10 THEN Writeln( Suma wynosi:, Suma); ELSE Writeln( Suma większa niż

Bardziej szczegółowo

Kodowanie informacji. Kody liczbowe

Kodowanie informacji. Kody liczbowe Wykład 2 2-1 Kodowanie informacji PoniewaŜ komputer jest urządzeniem zbudowanym z układów cyfrowych, informacja przetwarzana przez niego musi być reprezentowana przy pomocy dwóch stanów - wysokiego i niskiego,

Bardziej szczegółowo

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat

Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Opracował Jan T. Biernat Programowanie Strukturalne i Obiektowe Słownik podstawowych pojęć 1 z 5 Program, to lista poleceń zapisana w jednym języku programowania zgodnie z obowiązującymi w nim zasadami. Celem programu jest przetwarzanie

Bardziej szczegółowo

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania:

3. Opracować program kodowania/dekodowania pliku tekstowego. Algorytm kodowania: Zadania-7 1. Opracować program prowadzący spis pracowników firmy (max.. 50 pracowników). Każdy pracownik opisany jest za pomocą struktury zawierającej nazwisko i pensję. Program realizuje następujące polecenia:

Bardziej szczegółowo

Programowanie Komputerów

Programowanie Komputerów Programowanie Komputerów Łukasz Kuszner pokój 209, WETI http://www.kaims.pl/ kuszner/ kuszner@eti.pg.gda.pl Wykład 30 godzin, Laboratoria 30 godzin 2012/ Strona 1 z 17 1. Typy i zmienne Jak wiemy, komputer

Bardziej szczegółowo

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci: Reprezentacja liczb rzeczywistych w komputerze. Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci: k = m * 2 c gdzie: m częśd ułamkowa,

Bardziej szczegółowo

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet

Sieci Komputerowe. Wykład 1: TCP/IP i adresowanie w sieci Internet Sieci Komputerowe Wykład 1: TCP/IP i adresowanie w sieci Internet prof. nzw dr hab. inż. Adam Kisiel kisiel@if.pw.edu.pl Pokój 114 lub 117d 1 Kilka ważnych dat 1966: Projekt ARPANET finansowany przez DOD

Bardziej szczegółowo

Zestaw 3. - Zapis liczb binarnych ze znakiem 1

Zestaw 3. - Zapis liczb binarnych ze znakiem 1 Zestaw 3. - Zapis liczb binarnych ze znakiem 1 Zapis znak - moduł (ZM) Zapis liczb w systemie Znak - moduł Znak liczby o n bitach zależy od najstarszego bitu b n 1 (tzn. cyfry o najwyższej pozycji): b

Bardziej szczegółowo

Cyfrowy zapis informacji

Cyfrowy zapis informacji F1-1 Cyfrowy zapis informacji Alfabet: uporządkowany zbiór znaków, np. A = {a,b,..., z} Słowa (ciągi) informacyjne: łańcuchy znakowe, np. A i = gdtr Długość słowa n : liczba znaków słowa, np. n(sbdy) =

Bardziej szczegółowo

Podstawy programowania w C++

Podstawy programowania w C++ Podstawy programowania w C++ Strumienie wejścia cin>> i wyjścia cout

Bardziej szczegółowo

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki Turbo Pascal jest językiem wysokiego poziomu, czyli nie jest rozumiany bezpośrednio dla komputera, ale jednocześnie jest wygodny dla programisty,

Bardziej szczegółowo

Struktury, unie, formatowanie, wskaźniki

Struktury, unie, formatowanie, wskaźniki Struktury, unie, formatowanie, wskaźniki 1. Napisz aplikację, która na wejściu dostaje napis postaci W Roku Pańskim 1345, władca Henryk 12, na rzecz swoich 143209 poddanych uchwalił dekret o 20 procentowej

Bardziej szczegółowo

Aby lepiej zrozumieć działanie adresów przedstawmy uproszczony schemat pakietów IP podróżujących w sieci.

Aby lepiej zrozumieć działanie adresów przedstawmy uproszczony schemat pakietów IP podróżujących w sieci. Struktura komunikatów sieciowych Każdy pakiet posiada nagłówki kolejnych protokołów oraz dane w których mogą być zagnieżdżone nagłówki oraz dane protokołów wyższego poziomu. Każdy protokół ma inne zadanie

Bardziej szczegółowo

Algorytmika i Programowanie VBA 1 - podstawy

Algorytmika i Programowanie VBA 1 - podstawy Algorytmika i Programowanie VBA 1 - podstawy Tomasz Sokół ZZI, IL, PW Czas START uruchamianie środowiska VBA w Excelu Alt-F11 lub Narzędzia / Makra / Edytor Visual Basic konfiguracja środowiska VBA przy

Bardziej szczegółowo

Wstęp do programowania. Wykład 1

Wstęp do programowania. Wykład 1 Wstęp do programowania Wykład 1 1 / 49 Literatura Larry Ullman, Andreas Signer. Programowanie w języku C++. Walter Savitch, Kenrick Mock. Absolute C++. Jerzy Grębosz. Symfonia C++. Standard. Stephen Prata.

Bardziej szczegółowo

Wstęp do Informatyki

Wstęp do Informatyki Wstęp do Informatyki Bożena Woźna-Szcześniak bwozna@gmail.com Jan Długosz University, Poland Wykład 4 Bożena Woźna-Szcześniak (AJD) Wstęp do Informatyki Wykład 4 1 / 1 DZIELENIE LICZB BINARNYCH Dzielenie

Bardziej szczegółowo

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna

Dane, informacja, programy. Kodowanie danych, kompresja stratna i bezstratna Dane, informacja, programy Kodowanie danych, kompresja stratna i bezstratna DANE Uporządkowane, zorganizowane fakty. Główne grupy danych: tekstowe (znaki alfanumeryczne, znaki specjalne) graficzne (ilustracje,

Bardziej szczegółowo

Zapis liczb binarnych ze znakiem

Zapis liczb binarnych ze znakiem Zapis liczb binarnych ze znakiem W tej prezentacji: Zapis Znak-Moduł (ZM) Zapis uzupełnień do 1 (U1) Zapis uzupełnień do 2 (U2) Zapis Znak-Moduł (ZM) Koncepcyjnie zapis znak - moduł (w skrócie ZM - ang.

Bardziej szczegółowo

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

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p. Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy Laboratorium 2 Karol Tarnowski karol.tarnowski@pwr.edu.pl A-1 p. 411B Plan prezentacji Komentarze Funkcja printf() Zmienne Łańcuchy

Bardziej szczegółowo

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

Podstawy Programowania Podstawowa składnia języka C++ Podstawy Programowania Podstawowa składnia języka C++ Katedra Analizy Nieliniowej, WMiI UŁ Łódź, 3 października 2013 r. Szablon programu w C++ Najprostszy program w C++ ma postać: #include #include

Bardziej szczegółowo

Logiczny model komputera i działanie procesora. Część 1.

Logiczny model komputera i działanie procesora. Część 1. Logiczny model komputera i działanie procesora. Część 1. Klasyczny komputer o architekturze podanej przez von Neumana składa się z trzech podstawowych bloków: procesora pamięci operacyjnej urządzeń wejścia/wyjścia.

Bardziej szczegółowo

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

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

Bardziej szczegółowo