220 likes | 412 Views
Typy standardowe. Typ Boolean Typ Integer Typ Float Typ Character Operacje wejścia-wyjścia. Typ standardowy Boolean 1. Definicja type Boolean is (False, True); Operatory relacyjne takie same jak dla typów wyliczeniowych = /= < <= > >= Operatory logiczne
E N D
Typy standardowe • TypBoolean • TypInteger • TypFloat • TypCharacter • Operacje wejścia-wyjścia
Typ standardowyBoolean1 Definicjatype Boolean is (False, True); Operatory relacyjnetakie same jak dla typów wyliczeniowych= /= < <= > >= Operatory logiczne • Jednoargumentowy (unarny - unary) -not • Dwuargumentowe (binarne – binary) –and, or, xor Priorytety (priorities) operatorów logicznych Priorytet(not) > Priorytet(and)=Priorytet(or)=Priorytet(xor) Zalecenie.Stosuj nawiasy jeżeli masz wątpliwości jak będzie obliczone wyrażenie
Typ standardowyBoolean2 Dodatkowe operatory logiczne dwuargumentowe: or else(odpowiadaor), and then(odpowiadaand) W przypadku tych operatorów najpierw obliczany jest lewy argument i jeżeli wartość operacji może być wyznaczona na tej podstawie, prawy argument nie jest obliczany. Priorytet taki sam jak pozostałych operatorów logicznych dwuargumentowych Operatory przynależności: innot in służą do sprawdzania czy dana typu skalarnego należy do pewnego zakresu Liczba not in 1..10not (Liczba in 1..10)
Typ standardowyBoolean3 Przykłady PP_003_Operatory_Logiczne, PP_004_Nand_Nor
Typ standardowyInteger1 Zbiór do którego należą dane tego typu zależy od implementacji języka. Liczby z tego zbioru reprezentowane są dokładnie. Atrybuty‘First ‘Last ‘Size PrzykładPP_005_Atrybuty_Typu_Integer Operatory relacyjne= /= < <= > >= Operatory algebraiczne (algebraic operators) jednoargumentowe+ - abs dwuargumentowe+ - * / remmod ** PrzykładPP_006_Operacje_Calkowite DefinicjaStosowanie tych samych oznaczeń do różnych operatorów nazywamy przeciążaniem operatorów (operator overloading)
Typ standardowyInteger2 Priorytety operatorów działających na argumentach typuInteger ** abs * / mod rem + - jednoargumentowe + -dwuargumentowe = /= < <= > >= relacyjne ZalecenieStosuj nawiasy jeżeli masz wątpliwości jak będzie obliczone wyrażenie. Nawiasy kosztują mniej niż błędy (Van Tassel, 1982) Uwaga Operacja**nie jest operacją wewnętrzną ponieważ drugi argument (wykładnik) jest typuNatural, a nieInteger.
Typ standardowyInteger3 Zdefiniowane wstępnie (predefined) podtypy utworzone na bazie typuInteger subtype Natural is Integer range 0..Integer’Last subtype Positive is Integer range 1..Integer’Last Dzielenie całkowite 1 Przy dzieleniu dwóch liczb całkowitych - dzielnejAprzez dzielnikB /= 0otrzymuje się ilorazQi resztęR, a więc liczby te spełniają równanie A = Q*B + R W Adzie mamy operatory dwuargumentowe / i remtakie, żeQ = A/B i R = A rem B
Typ standardowyInteger4 Należy zwrócić uwagę na to, że jeżeli A i B nie dzielą się bez reszty, to iloraz jest zawsze liczbą bliższą zera. Przykład 5 / 2 = 2, 5 rem 2 = 1 5 / (-2) = -2, 5 rem (-2) = 1, (-5) / 2 = -2, (-5) rem 2 = -1, (-5) / (-2) = 2, (-5) rem (-2) = -1. W przypadku operatorów/, remmamy • Wartość bezwzględna ilorazu jest równa ilorazowi wartości bezwzględnych argumentów, • Znak reszty jest zawsze równy znakowi dzielnej.
Typ standardowyInteger5 Dzielenie całkowite 2 Drugim operatorem obliczającym resztę jest dwuargumentowy operator wewnętrznymod. Jeżeli B > 0, to A mod B in 0..B-1i jeżeli B < 0, to A mod B in B+1..0 Możemy zinterpretować operatormodjako operator obliczający resztę z dzielenia całkowitego, gdy iloraz jest obliczany przy pomocy funkcji nazywanej częścią całkowitą – funkcją podłoga (floor). Funkcja ta oznaczana jest symbolem. (Ross, Wright, 1999, 188) i określona jest następująco: x = największej liczbie całkowitej takiej, że jest mniejsza lub równax
Typ standardowyInteger6 Przykład4.5 = 4, -4.5 = -5. Jeżeli A = Qm*B + Rm, to Qm = A/B. Przykład 7/3 = 2, 7 mod 3 = 1, -7/3 = -3, -7 mod 3 = 2, 7/-3 = -3, 7 mod -3 = -2, -7/-3 = 2, -7 mod -3 = -1. W przypadku operatoramodmamy: • O znaku wyniku decyduje zawsze znak drugiego argumentu, czyli dzielnika • W przypadku, gdy znaki argumentów są różne, wyniki operacjiAremBi AmodBróżnią się.
Typ standardowyInteger7 Operacja modsłuży do implementacji arytmetyki modulo (modular arithmetic). W arytmetyce tej mamy m.in. (A + B) mod N = (A mod N + B mod N) mod N Przykład Wykresy funkcji k k mod 5, k k/5, k in –10..10, k k rem 5, k k/5, k in –10..10 pokazano na kolejnych dwóch rysunkach.
Typ standardowyFloat1 Ogólnie, liczby rzeczywiste są reprezentowane w sposób przybliżony. Reprezentacja typu standardowegoFloatzależy od implementacji języka. Inne typy zdefiniowane wstępnie: Short_Float, Long_Float, Long_Long_Float Wybrane atrybuty ‘First, ‘Last, ‘Size, ‘Digits, ‘Model_Epsilon, ‘Safe_First, ‘Safe_Last PrzykładPP_007_Zakresy_Typow_Float PrzykładPP_008_Atrybuty_Typu_Float
Typ standardowyFloat2 Operatory relacyjne= /= < <= > >= algebraiczne jednoargumentowe+ - abs dwuargumentowe+ - * / ** Priorytety takie jak dla typuInteger UwagaWykładnik czyli drugi argument operatora potęgowania jest typuInteger PrzykładPP_009_Operacje_Rzeczywiste Konwersja liczb rzeczywistych na całkowite i odwrotnie Float(67 = 67.0 , Integer(67.4 = 67
Typ standardowyFloat3 • Przy konwersji liczb rzeczywistych na całkowite wynik jest liczbą całkowitą najbliższą liczbie rzeczywistej • W przypadku, gdy liczba rzeczywista jest w równej odległości od dwóch liczb całkowitych wynik konwersji jest liczbą całkowitą dalszą od zera Integer(3.5) = 4, Integer(-3.5) = -4 PrzykładPP_010_Konwersja Częste stosowanie konwersji jawnej może wskazywać na to, że przyjęto nieodpowiednie typy danych PrzykładPP_011_Konwersja_Jednostek
Typ rzeczywisty ogólny PrzykładPP_012_Moje_Liczby_Rzeczywiste Można jednak to zrobić ogólniej, co zapewni nam przenośność programów PrzykładPakiet definicyjnyMy_Reals PrzykładPP_013_Atrybuty_Typu_Real PrzykładPP_014_Test_Reals
Wybrane operacje wejścia-wyjścia 1 subtype Field is Integer range 0 .. 255; subtype Number_Base is Integer range 2 .. 16; Liczby rzeczywiste type Num is digits <>; Default_Fore : Field := 2; Default_Aft : Field := Num'Digits - 1; Default_Exp : Field := 3; procedure Put (Item : in Num; Fore : in Field := Default_Fore; Aft : in Field := Default_Aft; Exp : in Field := Default_Exp);
Wybrane operacje wejścia-wyjścia 2 Liczby całkowite package Ada.Text_IO.Integer_IO is Default_Width : Field := Num'Width; Default_Base : Number_Base := 10; type Num is range <>; procedure Put (Item : in Num; Width : in Field := Default_Width; Base : in Number_Base := Default_Base);
Wybrane operacje wejścia-wyjścia 3 PrzykładPP_015_Formatowanie PrzykładPP_016_Read_Boolean PrzykładPP_017_Czytaj_Typ_Wyliczeniowy PrzykładPP_018_Czytaj_Dowolny_Napis Przykład Pakiet definicyjnyMy_Robust_Input.ads, Pakiet implementacyjny My_Robust_Input.adb PrzykładPP_019_Test_My_Robust_Input
Zadania. Literatura podstawowa Zadania Ada_Zadania_04_Typy_Standardowe.pdf Literatura podstawowa Morawski, M., Zajączkowski, A.M. (2003). Wstęp do programowania w języku Ada’95. Rozdziały 3.6..3.9.