Jednostki informacji cyfrowej. Kodowanie znaków. Język C. dr inż. Jarosław Forenc. FLOPS (FLoating point Operations Per Second)

Podobne dokumenty
dr inż. Jarosław Forenc

dr inż. Jarosław Forenc

Jednostki informacji cyfrowej. Kodowanie znaków. Kodowanie liczb. dr inż. Jarosław Forenc

dr inż. Jarosław Forenc

Kodowanie liczb. Kodowanie znaków. Reprezentacja liczb w systemach komputerowych Reprezentacja stałoprzecinkowa. dr inŝ.

Komunikacja człowiek-komputer

dr inż. Jarosław Forenc

Jednostki informacji cyfrowej. Kodowanie znaków. Kodowanie liczb. Reprezentacja liczb w systemach komputerowych. Reprezentacja stałoprzecinkowa

Jednostki informacji - bit. Kodowanie znaków: ASCII, ISO 8859, Unicode liczb: NKB (BCN), U2, BCD. Liczby zmiennoprzecinkowe standard IEEE 754

Pracownia Komputerowa wyk ad VII

dr inż. Jarosław Forenc

Kodowanie informacji. Przygotował: Ryszard Kijanka

dr inż. Jarosław Forenc

Ochrona danych osobowych. Pozycyjne systemy liczbowe. Jednostki informacji. Kodowanie znaków ASCII, ISO 8859, Unicode. Kodowanie liczb NKB, U2, BCD

if (warunek) instrukcja1; if (warunek) instrukcja1; else instrukcja2; a > b - a większe od b if (warunek) instrukcja1; a <= b - a mniejsze lub równe b

Pracownia komputerowa. Dariusz Wardecki, wyk. VIII

Informatyka 1. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

Sposób reprezentacji informacji w systemie. Reprezentacja informacji. Dzięki kodowaniu informacji.

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

Informatyka 1. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

dr inż. Jarosław Forenc

Systemy pozycyjne. Systemy niepozycyjne. Kodowanie liczb. Kodowanie znaków. dr inż. Jarosław Forenc

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

dr inż. Paweł Myszkowski

kodowanie informacji Autor prezentacji: 1 prof. dr hab. Maria Hilczer

Kody liczbowe - Naturalny Kod Binarny (NKB) Kody liczbowe - Kod BCD. Kody liczbowe - Przechowywanie liczb w kodzie BCD

Kody liczbowe - Naturalny Kod Binarny (NKB) Kody liczbowe - Kod BCD. Kody liczbowe - Przechowywanie liczb w kodzie BCD

Techniki multimedialne

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

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

Informatyka 1. Wykład nr 3 ( ) Politechnika Białostocka. - Wydział Elektryczny. dr inŝ. Jarosław Forenc

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

Podstawy informatyki. Reprezentacja danych w systemach cyfrowych

Podstawy programowania w C++

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

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

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

Ź Ą Ś ć ć Ą Ś Í ć Ł ć ć

Komputerowa reprezentacja znaków i liczb. dr inż. Izabela Szczęch Politechnika Poznańska Podstawy informatyki

PODSTAWY INFORMATYKI. Informatyka? - definicja

Spis treści JĘZYK C - OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, INSTRUKCJA WARUNKOWA IF. Informatyka 1

Systemy liczenia. 333= 3*100+3*10+3*1

1.1. Pozycyjne systemy liczbowe

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Metodyki i techniki programowania

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

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

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

1 Podstawy c++ w pigułce.

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

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

2 Przygotował: mgr inż. Maciej Lasota

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE. Informatyka 1

int tab[5]; tab[1]; ciągły obszar pamięci, w którym umieszczone są elementy tego samego typu macierz [ ] - dwuargumentowy operator indeksowania

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

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

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

Spis treści JĘZYK C - INSTRUKCJA WARUNKOWA IF, OPERATORY RELACYJNE I LOGICZNE, WYRAŻENIA LOGICZNE, ZAGNIEŻDŻANIE IF-ELSE.

Podstawy programowania w języku C i C++

Podstawy informatyki. Izabela Szczęch. Politechnika Poznańska

Stan wysoki (H) i stan niski (L)

Wstęp do Informatyki

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

ľ ľ ż ľ ż ľ ż ť ŕ ľ ľ ľ ľ ľ ý ľ ľ ľ ľ ľ ń ľ ý

while (test) instrukcja; int i=0; while (i<10) i++; dopóki test prawdziwy wykonuj instrukcję Wykonano: 35% / \ fałsz test prawda instrukcja

#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 ); }

INFORMATYKA. Zajęcia organizacyjne. Arytmetyka komputerowa.

Podstawy programowania C. dr. Krystyna Łapin

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

DZIESIĘTNY SYSTEM LICZBOWY

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

#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 ); }

1 Podstawy c++ w pigułce.

Mikrokontroler ATmega32. Język symboliczny

Zmienne, stałe i operatory

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

konsultacje: dr inŝ. Jarosław Forenc Dydaktyka - slajdy prezentowane na wykładzie

Wstęp do programowania

Podstawy Informatyki. Inżynieria Ciepła, I rok. Wykład 5 Liczby w komputerze

Architektura komputerów

Technologie Informacyjne

for (i=0; i<10; i=i+1) instrukcja; instrukcja zostanie wykonana 10 razy for (inicjalizacja; test; aktualizacja) instrukcja;

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Arytmetyka komputera

Spis treści JĘZYK C - ZAGNIEŻDŻANIE IF-ELSE, OPERATOR WARUNKOWY. Metodyki i techniki programowania

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Informatyka 1. Instrukcja do pracowni specjalistycznej z przedmiotu. Numer ćwiczenia INF05

Pracownia komputerowa. Dariusz Wardecki, wyk. IV

Programowanie Niskopoziomowe

Architektura komputerów

Pracownia Komputerowa wykład IV

Pracownia Komputerowa wykład VI

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

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

4. Funkcje. Przykłady

Język C zajęcia nr 11. Funkcje

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

Spis treści JĘZYK C - INSTRUKCJA SWITCH, OPERATORY BITOWE. Metodyki i techniki programowania. Instrukcja do pracowni specjalistycznej z przedmiotu

Laboratorium Podstaw Informatyki. Kierunek Elektrotechnika. Ćwiczenie 1. Podstawy. Wprowadzenie do programowania w języku C. Katedra Metrologii AGH

Liczby całkowite. Wstęp do Informatyki Podstawy arytmetyki komputerowej c.d. Kod BCD (Binary Coded Decimal) Arytmetyka liczb całkowitych

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Transkrypt:

Rok akademicki 2018/2019, Wykład nr 3 2/56 Plan wykładu nr 3 Informatyka 1 Politechnika Białostocka - Wydział Elektryczny Elektrotechnika, semestr II, studia niestacjonarne I stopnia Rok akademicki 2018/2019 Wykład nr 3 (22.03.2019) Jednostki informacji cyfrowej słowo, FLOPS Kodowanie znaków ASCII, ISO/IEC 646, ISO 8859 Język C EBCDIC, Windows-1250, Unicode instrukcje warunkowa if operator warunkowy instrukcja switch Rok akademicki 2018/2019, Wykład nr 3 3/56 Rok akademicki 2018/2019, Wykład nr 3 4/56 Słowo maszynowe (słowo) FLOPS Słowo maszynowe (słowo - ang. word) - jednostka danych używana przez określony komputer (określoną architekturę) Słowo składa się odgórnie określonej liczby bitów, nazywanej długością lub szerokością słowa (najczęściej jest to potęga 2, np. 8, 16, 32, 64 bity) Zazwyczaj wielkość słowa określa: rozmiar rejestrów procesora rozmiar szyny danych i szyny adresowej Architektury: 8-bitowa: Intel 8080, Z80, Motorola 6800, Intel 8051 16-bitowa: Intel 8086, Intel 80286 32-bitowa: Intel od 80386 do i7, AMD od 5x86 do Athlona, ARM 64-bitowa: Intel Itanium, Pentium 4/EM64T, Core 2, Core i7 AMD Opteron, Athlon 64, Athlon II FLOPS (FLoating point Operations Per Second) liczba operacji zmiennoprzecinkowych na sekundę jednostka wydajności układów zmiennoprzecinkowych Przykłady wydajności procesorów (teoretyczne): Intel Core i7 975 3,46 GHz - 55,36 GFlops Intel Core2 Quad Q9650 3,00 GHz - 48 GFlops Intel Core2 Duo E8400 3,00 GHz - 24 GFlops najszybszy system równoległy na świecie: Summit (USA) DOE/SC/Oak Ridge National Laboratory processors: IBM POWER9 (2/node) GPUs: 27,648 Nvidia Volta V100s (6/node) nodes: 4.608, cores: 2.397.824 www.top500.org - 143.500.000 GFlops

Rok akademicki 2018/2019, Wykład nr 3 5/56 Rok akademicki 2018/2019, Wykład nr 3 6/56 Kodowanie Kod ASCII Kodowanie - proces przekształcania jednego rodzaju postaci informacji na inną postać ASCII - American Standard Code for Information Interchange Alfanumeryczne ASCII Kody Liczbowe NKB Inne Graya 7-bitowy kod przypisujący liczby z zakresu 0-127: - literom (alfabet angielski) - cyfrom - znakom przestankowym - innym symbolom - poleceniom sterującym. ISO 646 ISO 8859 EBCDIC Unicode BCD 1 z N 2 z 5 U2 Morse a Rok akademicki 2018/2019, Wykład nr 3 7/56 Rok akademicki 2018/2019, Wykład nr 3 8/56 Kod ASCII - Kody sterujące Kod ASCII - Pliki tekstowe Kody sterujące - 33 kody, o numerach: 0-31, 127 Elementami pliku tekstowego są wiersze, mogą one mieć różną długość W systemie Windows każdy wiersz pliku zakończony jest parą znaków: CR, ang. carriage return - powrót karetki, kod ASCII - 13 (10) = 0D (16) LF, ang. line feed - przesunięcie o wiersz, kod ASCII - 10 (10) = 0A (16) Załóżmy, że plik tekstowy ma postać: Rzeczywista zawartość pliku jest następująca: W języku C: 0 (NULL) - \0 7 (BEL) - \a 8 (BS) - \b 9 (TAB) - \t 10 (LF) - \n 13 (CR) - \r Wydruk zawiera: przesunięcie od początku pliku (szesnastkowo) wartości poszczególnych bajtów pliku (szesnastkowo) znaki odpowiadające bajtom pliku (traktując bajty jako kody ASCII)

Rok akademicki 2018/2019, Wykład nr 3 9/56 Rok akademicki 2018/2019, Wykład nr 3 10/56 Kod ASCII - Pliki tekstowe ISO/IEC 646 W systemie Linux znakiem końca wiersza jest tylko LF o kodzie ASCII - 10 (10) = 0A (16) Załóżmy, że plik tekstowy ma postać: ISO/IEC 646 - norma definiująca modyfikację 7-bitowego kodowania ASCII, stosowana w latach 70-tych i 80-tych W normie określono 10 pozycji na znaki w języku kraju, który przyjął tę normę oraz 2 pozycje na znaki walut Rzeczywista zawartość pliku jest następująca: Podczas przesyłania pliku tekstowego (np. przez protokół ftp) z systemu Linux do systemu Windows pojedynczy znak LF zamieniany jest automatycznie na parę znaków CR i LF Błędne przesłanie pliku tekstowego (w trybie binarnym) powoduje nieprawidłowe jego wyświetlanie: 0 1 2 3 4 5 6 7 8 9 A B C D E F 00 Znaki kontrolne 10 20 SP! " # $ % & ( ) * +, -. / 30 0 1 2 3 4 5 6 7 8 9 : ; < = >? 40 @ A B C D E F G H I J K L M N O 50 P Q R S T U V W X Y Z [ \ ] ^ _ 60 ` a b c d e f g h i j k l m n o 70 p q r s t u v w x y z ~ Wszystkie pozostałe znaki są zgodne z ASCII żółty - znaki narodowe niebieski - znaki walut Rok akademicki 2018/2019, Wykład nr 3 11/56 Rok akademicki 2018/2019, Wykład nr 3 12/56 ISO/IEC 646 - odmiany narodowe ISO/IEC 8859 ISO/IEC 8859 - zestaw standardów służących do kodowania znaków za pomocą 8-bitów Wszystkie zestawy ISO 8859 mają znaki 0 (10) -127 (10) (00 (16) -7F (16) ) takie same jak w kodzie ASCII Pozycjom 128 (10) -159 (10) (80 (16) -9F (16) ) przypisane są dodatkowe kody sterujące, tzw. C1 (obecnie nie są używane) Od czerwcu 2004 roku ISO 8859 nie jest rozwijane. Norma: BN-74/3101-01

Rok akademicki 2018/2019, Wykład nr 3 13/56 Rok akademicki 2018/2019, Wykład nr 3 14/56 ISO/IEC 8859 ISO/IEC 8859-1 Stosowane standardy ISO 8859: ISO 8859-1 (Latin-1) - alfabet łaciński dla Europy zachodniej ISO 8859-2 (Latin-2) - łaciński dla Europy środkowej i wschodniej ISO 8859-3 (Latin-3) - łaciński dla Europy południowej ISO 8859-4 (Latin-4) - łaciński dla Europy północnej ISO 8859-5 (Cyrillic) - dla cyrylicy ISO 8859-6 (Arabic) - dla alfabetu arabskiego ISO 8859-7 (Greek) - dla alfabetu greckiego ISO 8859-8 (Hebrew) - dla alfabetu hebrajskiego ISO 8859-9 (Latin-5) ISO 8859-10 (Latin-6) ISO 8859-11 (Thai) - dla alfabetu tajskiego ISO 8859-12 - brak ISO 8859-13 (Latin-7) ISO 8859-14 (Latin-8) - zawiera polskie litery ISO 8859-15 (Latin-9) ISO 8859-16 (Latin-10) - łaciński dla Europy środkowej, zawiera polskie litery ISO/IEC 8859-1, Latin-1 ( zachodnioeuropejskie ) kodowanie używane w Amerykach, Europie Zachodniej, Oceanii i większej części Afryki dostępne języki: albański, angielski, baskijski, duński, estoński, fiński, francuski, hiszpański, irlandzki, islandzki, kataloński, łaciński, niderlandzki, niemiecki, norweski, portugalski, retoromański, szkocki, szwedzki, włoski 191 znaków łacińskiego pisma. SP - spacja NBSP - twarda spacja SHY - miękki dywiz (myślnik) Rok akademicki 2018/2019, Wykład nr 3 15/56 Rok akademicki 2018/2019, Wykład nr 3 16/56 ISO/IEC 8859-2 ISO/IEC 8859-2 - Litery diakrytyczne w j. polskim ISO/IEC 8859-2, Latin-2 ( środkowo, wschodnioeuropejskie ) dostępne języki: bośniacki, chorwacki, czeski, węgierski, polski, rumuński, serbski, serbsko-chorwacki, słowacki, słoweński, górno- i dolnołużycki możliwość przedstawienia znaków w języku niemieckim i angielskim 191 znaków łacińskiego pisma kodowanie zgodne z Polską Normą. 18 liter: Ą - ą Ć - ć Ę - ę Ł - ł Ń - ń Ó - ó Ś - ś Ź - ź Ż - ż SP - spacja NBSP - twarda spacja SHY - miękki dywiz (myślnik)

Rok akademicki 2018/2019, Wykład nr 3 17/56 Rok akademicki 2018/2019, Wykład nr 3 18/56 ISO/IEC 8859-1 i ISO/IEC 8859-2 - porównanie EBCDIC EBCDIC - Extended Binary Coded Decimal Interchange Code 8-bitowe kodowanie znaków stworzone jako rozszerzenie kodowania BCD używane głównie w systemach IBM w latach 60-tych XX wieku umożliwia zapisanie do 256 różnych symboli brak zachowania kolejności liter zgodnie z kolejnością kodów, np. po R nie ma S kody EBCDIC nie są zgodne z ASCII. Rok akademicki 2018/2019, Wykład nr 3 19/56 Rok akademicki 2018/2019, Wykład nr 3 20/56 EBCDIC i ISO 8859-1 - porównanie Windows-1250 Windows-1250 (CP-1250) - strona kodowa używana przez system Microsoft Windows do reprezentacji tekstów w językach środkowoeuropejskich używających alfabetu łacińskiego Obsługiwane języki: albański, chorwacki, czeski, polski, rumuński, słowacki, słoweński, węgierski (ale także niemiecki) Windows-1250 jest podobny do ISO 8859-2 - posiada wszystkie jego drukowalne znaki (a także kilka dodatkowych), lecz kilka z nich zajmuje inne miejsca.

Rok akademicki 2018/2019, Wykład nr 3 21/56 Rok akademicki 2018/2019, Wykład nr 3 22/56 ISO 8859-2 i Windows-1250 - porównanie Problem kodowania polskich liter diakrytycznych Windows-1250 0 1 2 3 4 5 6 7 8 9 A B C D E F 00 Znaki kontrolne 10 20 SP! " # $ % & ( ) * +, -. / 30 0 1 2 3 4 5 6 7 8 9 : ; < = >? 40 @ A B C D E F G H I J K L M N O 50 P Q R S T U V W X Y Z [ \ ] ^ _ 60 ` a b c d e f g h i j k l m n o 70 p q r s t u v w x y z ~ 80 À Š Ś Ť Ž Ź 90 š ś ť ž ź NB A0 ˇ Ł Ą Ş «SH SP Y Ž Ż B0 ± ł µ ą ş» Ľ ľ ż C0 Ŕ Á Â Ă Ä Ĺ Ć Ç Č É Ę Ë Ě Í Î Ď D0 Đ Ń Ň Ó Ô Ő Ö Ř Ů Ú Ű Ü Ý Ţ ß E0 ŕ á â ă ä ĺ ć ç č é ę ë ě í î ď F0 đ ń ň ó ô ő ö ř ů ú ű ü ý ţ Problem z wyświetlaniem polskich liter diakrytycznych Tekst zapisany w standardzie ISO-8859-2: Ą Ć Ę Ł Ń Ó Ś Ź Ż ą ć ę ł ń ó ś ź ż Tekst wyświetlony w Notatniku systemu Windows (Windows-1250): ˇ Ć Ę Ł Ń Ó Ż ± ć ę ł ń ó Ľ ż Rok akademicki 2018/2019, Wykład nr 3 23/56 Rok akademicki 2018/2019, Wykład nr 3 24/56 Unicode (Unikod) Komputerowy zestaw znaków mający obejmować wszystkie pisma i inne znaki (symbole techniczne, wymowy) używane na świecie Unicode przypisuje unikalny numer każdemu znakowi, niezależny od używanej platformy, programu czy języka Rozwijany przez konsorcjum utworzone przez firmy komputerowe, producentów oprogramowania oraz grupy użytkowników http://www.unicode.org Pierwsza wersja: Unicode 1.0 (10.1991) Ostatnia wersja: Unicode 12.0 (05.03.2019) The Unicode Consortium. The Unicode Standard, Version 12.0.0, (Mountain View, CA: The Unicode Consortium, 2019) http://www.unicode.org/versions/unicode12.0.0/ koduje 137.928 znaków Unicode - Zakresy Zakres: Znaczenie: U+0000 - U+007F Basic Latin (to samo co w ASCII) U+0080 - U+00FF Latin-1 Supplement (to samo co w ISO/IEC 8859-1) U+0100 - U+017F Latin Extended-A U+0180 - U+024F Latin Extended-B U+0250 - U+02AF IPA Extensions U+02B0 - U+02FF Spacing Modifiers Letters... U+0370 - U+03FF Greek U+0400 - U+04FF Cyrillic... U+1D00 - U+1D7F Phonetic Extensions U+1D80 - U+1DBF Phonetic Extensions Supplement U+1E00 - U+1EFF Latin Extended Additional U+1F00 - U+1FFF Greek Extended...

Rok akademicki 2018/2019, Wykład nr 3 25/56 Rok akademicki 2018/2019, Wykład nr 3 26/56 Unicode Unicode Standard Unicode definiuje nie tylko kody numeryczne przypisane poszczególnym znakom, ale także określa sposób bajtowego kodowania znaków Metody kodowania różnią się liczbą bajtów przeznaczonych do opisania kodu znaku Kodowanie określa sposób w jaki znaki ze zbioru mają być zapisane w postaci binarnej Istnieją trzy podstawowe metody kodowania: 32-bitowe: UTF-32 16-bitowe: UTF-16 8-bitowe: UTF-8 gdzie: UTF - UCS Transformation Format UCS - Universal Character Set Wszystkie metody obejmują wszystkie kodowane znaki w Unicode. źródło: The Unicode Consortium. The Unicode Standard, Version 8.0 Rok akademicki 2018/2019, Wykład nr 3 27/56 Rok akademicki 2018/2019, Wykład nr 3 28/56 Unicode - kodowanie UTF-32 Unicode - kodowanie UTF-16 UTF-32 - sposób kodowania standardu Unicode wymagający użycia 32-bitowych słów UTF-16 - sposób kodowania standardu Unicode wymagający użycia 16-bitowych słów Kod znaku ma zawsze stałą długość 4 bajtów i przedstawia numer znaku w tabeli Unikodu Kody obejmują zakres od 0 do 0x10FFFF (od 0 do 1114111) Kodowanie to jest jednak bardzo nieefektywne - zakodowane ciągi znaków są 2-4 razy dłuższe niż ciągi tych samych znaków zapisanych w innych kodowaniach. Dla znaków z przedziału od U+0000 do U+FFFF używane jest jedno słowo, którego wartość jest jednocześnie kodem znaku w Unicode Dla znaków z wyższych pozycji używa się dwóch słów: pierwsze słowo należy do przedziału: U+D800 - U+DBFF drugie słowo należy do przedziału: U+DC00 - U+DFFF.

Rok akademicki 2018/2019, Wykład nr 3 29/56 Rok akademicki 2018/2019, Wykład nr 3 30/56 Unicode - kodowanie UTF-8 Unicode UTF-8 - kodowanie ze zmienną długością reprezentacji znaku wymagające użycia 8-bitowych słów Znaki Unikodu są mapowane na ciągi bajtów 0x00 do 0x7F - bity 0xxxxxxx 0x80 do 0x7FF - bity 110xxxxx 10xxxxxx 0x800 do 0xFFFF - bity 1110xxxx 10xxxxxx 10xxxxxx 0x10000 do 0x1FFFFF - bity 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 0x200000 do 0x3FFFFFF - bity 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x4000000 do 0x7FFFFFFF- bity 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Rok akademicki 2018/2019, Wykład nr 3 31/56 Rok akademicki 2018/2019, Wykład nr 3 32/56 Unicode Język C - Pierwiastek kwadratowy #include <stdio.h> #include <math.h> int main(void) float x, y; Podaj liczbe: 15 Pierwiastek liczby: 3.872983 Podaj liczbe: -15 Pierwiastek liczby: -1.#IND00 printf("podaj liczbe: "); scanf("%f",&x); y = sqrt(x); printf("pierwiastek liczby: %f\n",y); return 0;

Rok akademicki 2018/2019, Wykład nr 3 33/56 Rok akademicki 2018/2019, Wykład nr 3 34/56 Język C - Pierwiastek kwadratowy #include <stdio.h> #include <math.h> int main(void) float x, y; printf("podaj liczbe: "); scanf("%f",&x); Podaj liczbe: 15 Pierwiastek liczby: 3.872983 Podaj liczbe: -15 Blad! Liczba ujemna if (x>=0) y = sqrt(x); printf("pierwiastek liczby: %f\n",y); printf("blad! Liczba ujemna\n"); return 0; Język C - instrukcja warunkowa if if (wyrażenie) instrukcja1 if (wyrażenie) instrukcja1 instrukcja2 Wyrażenie w nawiasach: jeśli wyrażenie jest prawdziwe, to wykonywana jest instrukcja1 gdy wyrażenie jest fałszywe, to instrukcja1 nie jest wykonywana prawdziwe - gdy jego wartość jest różna od zera fałszywe - gdy jego wartość jest równa zero jeśli wyrażenie jest prawdziwe, to wykonywana jest instrukcja1, zaś instrukcja2 nie jest wykonywana gdy wyrażenie jest fałszywe, to wykonywana jest instrukcja2, zaś instrukcja1 nie jest wykonywana Rok akademicki 2018/2019, Wykład nr 3 35/56 Rok akademicki 2018/2019, Wykład nr 3 36/56 Język C - instrukcja warunkowa if Język C - instrukcja warunkowa if if (wyrażenie) instrukcja Instrukcja: prosta - jedna instrukcja zakończona średnikiem złożona - jedna lub kilka instrukcji objętych nawiasami klamrowymi if (x>0) printf("inst1"); if (x>0) printf("inst1"); printf("inst2");... if (wyr) if (wyr) if (wyr) if (wyr) if (wyr) if (wyr) if (wyr)

Rok akademicki 2018/2019, Wykład nr 3 37/56 Rok akademicki 2018/2019, Wykład nr 3 38/56 Język C - Operatory relacyjne (porównania) Język C - Operatory logiczne Operator Przykład Znaczenie > a > b a większe od b < a < b a mniejsze od b >= a >= b a większe lub równe b <= a <= b a mniejsze lub równe b == a == b a równe b!= a!= b a nierówne b (a różne od b) Operator Znaczenie! NOT, nie && AND, i OR, lub Opis jednoargumentowy operator negacji logicznej - zmienia argument różny od zera na wartość 0, a argument równy zero na wartość 1 dwuargumentowy operator koniunkcji, iloczyn logiczny dwuargumentowy operator alternatywy, suma logiczna Wynik porównania jest wartością typu int i jest równy: 1 - gdy warunek jest prawdziwy 0 - gdy warunek jest fałszywy (nie jest prawdziwy) Wynikiem zastosowania operatorów logicznych && i jest wartość typu int równa 1 (prawda) lub 0 (fałsz) if (x>5 && x<8) if (x<=5 x>8) Rok akademicki 2018/2019, Wykład nr 3 39/56 Rok akademicki 2018/2019, Wykład nr 3 40/56 Język C - Wyrażenia logiczne Język C - Wyrażenia logiczne Wyrażenia logiczne mogą zawierać: operatory relacyjne operatory logiczne operatory arytmetyczne operatory przypisania zmienne stałe wywołania funkcji Kolejność operacji wynika z priorytetu operatorów Operator Typ operatora! logiczny * / % arytmetyczne + - arytmetyczne > < >= <= relacyjne ==!= relacyjne && logiczny logiczny = przypisania int x = 0, y = 1, z = 2; if (x == 0) wynik: 1 (prawda) if (x = 0) wynik: 0 (fałsz) (!!!) if (x!= 0) wynik: 0 (fałsz) if (x =! 0) wynik: 1 (prawda) (!!!) if ( z > x + y ) wynik: 1 (prawda) if (z > (x + y))

Rok akademicki 2018/2019, Wykład nr 3 41/56 Rok akademicki 2018/2019, Wykład nr 3 42/56 Język C - Wyrażenia logiczne Język C - Wyrażenia logiczne int x = 0, y = 1, z = 2; if (x>2&&x<5) wynik: 0 (fałsz) if ((x>2)&&(x<5)) W przypadku sprawdzania czy wartość wyrażenia jest równa lub różna od zera można zastosować skrócony zapis Zamiast: if (x==0) if (x!=0) Wyrażenia logiczne obliczane są od strony lewej do prawej Proces obliczeń kończy się, gdy wiadomo, jaki będzie wynik całego wyrażenia if (2<x<5) wynik: 1 (prawda) (!!!) można napisać: if (!x) if (x) Rok akademicki 2018/2019, Wykład nr 3 43/56 Rok akademicki 2018/2019, Wykład nr 3 44/56 Język C - BMI Język C - BMI BMI - współczynnik powstały przez podzielenie masy ciała podanej w kilogramach przez kwadrat wzrostu podanego w metrach Dla osób dorosłych: masa BMI = wzrost BMI < 18,5 - wskazuje na niedowagę BMI 18,5 i BMI < 25 - wskazuje na prawidłową masę ciała BMI 25 - wskazuje na nadwagę 2 #include <stdio.h> int main(void) double masa, wzrost, bmi; Podaj mase [kg]: 84 Podaj wzrost [m]: 1.85 bmi: 24.54 Norma printf("podaj mase [kg]: "); scanf("%lf",&masa); printf("podaj wzrost [m]: "); scanf("%lf",&wzrost); bmi = masa / (wzrost*wzrost); printf("bmi: %.2f\n",bmi); if (bmi<18.5) printf("niedowaga\n"); if (bmi>=18.5 && bmi<25) printf("norma\n"); if (bmi>=25) printf("nadwaga\n"); return 0;

Rok akademicki 2018/2019, Wykład nr 3 45/56 Rok akademicki 2018/2019, Wykład nr 3 46/56 Język C - BMI Język C - Operator warunkowy Zamiast trzech instrukcji if: Operator warunkowy skład się z dwóch symboli i trzech operandów if (bmi<18.5) printf("niedowaga\n"); if (bmi>=18.5 && bmi<25) printf("norma\n"); if (bmi>=25) printf("nadwaga\n"); wyrażenie1? wyrażenie2 : wyrażenie3 Najczęściej zastępuje proste instrukcje if- float akcyza, cena, pojemnosc; można zastosować tylko dwie: if (bmi<18.5) printf("niedowaga\n"); if (bmi<25) printf("norma\n"); printf("nadwaga\n"); if (pojemnosc <= 2000) akcyza = cena*0.031; /* 3.1% */ akcyza = cena*0.186; /* 18.6% */ akcyza = pojemnosc <= 2000? cena*0.031 : cena*0.186; Rok akademicki 2018/2019, Wykład nr 3 47/56 Rok akademicki 2018/2019, Wykład nr 3 48/56 Język C - Operator warunkowy Język C - Operator warunkowy if (x < 0) y = -x; y = x; if (a > b) max = a; max = b; y = x < 0? -x : x; obliczenie modułu liczby x max = a > b? a : b; wyznaczenie max z dwóch liczb x studentów chce dojechać z akademika do biblioteki - ile taksówek powinni zamówić? (jedna taksówka może przewieźć 4 osoby) #include <stdio.h> int main(void) int x, taxi; printf("podaj liczbe studentow: "); scanf("%d",&x); taxi = x / 4 + (x % 4? 1 : 0); Podaj liczbe studentow: 23 Liczba taxi: 6 Operator warunkowy ma bardzo niski priorytet Niższy priorytet mają tylko operatory przypisania (=, +=, -=, ) i operator przecinkowy (,) printf("liczba taxi: %d\n",taxi); return 0;

Rok akademicki 2018/2019, Wykład nr 3 49/56 Rok akademicki 2018/2019, Wykład nr 3 50/56 Język C - Instrukcja switch Język C - Instrukcja switch Instrukcja wyboru wielowariantowego switch wyrażenie_stałe - wartość typu całkowitego, znana podczas kompilacji stała liczbowa, np. 3, 5, 9 switch (wyrażenie) case wyrażenie_stałe: instrukcje; case wyrażenie_stałe: instrukcje; case wyrażenie_stałe: instrukcje;... default: instrukcje; znak w apostrofach, np. 'a', 'z', '+' stała zdefiniowana przez const lub #define Program wyświetlający słownie liczbę z zakresu 1..5 wprowadzoną z klawiatury #include <stdio.h> int main(void) int liczba; printf("podaj liczbe (1..5): "); scanf("%d",&liczba); Rok akademicki 2018/2019, Wykład nr 3 51/56 Rok akademicki 2018/2019, Wykład nr 3 52/56 Język C - Instrukcja switch Język C - Instrukcja switch switch (liczba) case 1: printf("liczba: jeden\n"); case 2: printf("liczba: dwa\n"); case 3: printf("liczba: trzy\n"); case 4: printf("liczba: cztery\n"); case 5: printf("liczba: piec\n"); default: printf("inna liczba\n"); Podaj liczbe: 2 Liczba: dwa Podaj liczbe: 0 Inna liczba switch (liczba) case 1: case 3: case 5: printf("liczba nieparzysta\n"); case 2: case 4: printf("liczba parzysta\n"); default: printf("inna liczba\n"); Podaj liczbe: 2 Liczba parzysta Te same instrukcje mogą być wykonane dla kilku etykiet case

Rok akademicki 2018/2019, Wykład nr 3 53/56 Rok akademicki 2018/2019, Wykład nr 3 54/56 Język C - Instrukcja switch switch (liczba) case 1: case 3: case 5: printf("liczba nieparzysta\n"); case 2: case 4: printf("liczba parzysta\n"); default: printf("inna liczba\n"); Etykiety case mogą być pisane w jednym wierszu Podaj liczbe: 2 Liczba parzysta Język C - Instrukcja switch switch (liczba%2) case 1: case -1: printf("liczba nieparzysta\n"); case 0: printf("liczba parzysta\n"); Część domyślna (default) może być pominięta Podaj liczbe: 2 Liczba parzysta Rok akademicki 2018/2019, Wykład nr 3 55/56 Rok akademicki 2018/2019, Wykład nr 3 56/56 Język C - Instrukcja switch (bez break) Koniec wykładu nr 3 switch (liczba) case 1: printf("liczba: jeden\n"); case 2: printf("liczba: dwa\n"); case 3: printf("liczba: trzy\n"); case 4: printf("liczba: cztery\n"); case 5: printf("liczba: piec\n"); default: printf("inna liczba\n"); Podaj liczbe: 2 Liczba: dwa Liczba: trzy Liczba: cztery Liczba: piec Inna liczba Dziękuję za uwagę! (następny wykład: 29.03.2019) Pominięcie instrukcji break spowoduje wykonanie wszystkich instrukcji występujących po danym case (do końca switch)