Сторінка
1
- є скінченною обмеженою підмножиною множини раціональних чисел;
- містить усі цілі числа, представні в типі integer (і багато інших, але все одно їх скінченна множина!).
|x|, , sinx, cosx, arctgx, ex, lnx. Вираз із числовим значенням записується як аргумент у виклику функції з ім'ям відповідно
abs, sqrt, sin, cos, arctan, exp, ln або sqr, наприклад,
abs(-2), sqrt(1-sin(x)), arctan(sin(1)/cos(1)), exp(ln(x)). Значення аргументу у викликах тригонометричних функцій виражає кількість радіан, а не градусів. Крім того, виклик функції sqr(x) за дійсним значенням x породжує дійсне значення x2, а за цілим – ціле. У системі Турбо Паскаль означено також нульмісну функцію Pi (її значенням є число, близьке до числа p ) й одномісні функції Frac і Int, застосовні лише до дійсних. Вони задають обчислення дробової частини й дійсного подання цілої частини свого аргументу. Наприклад, sin(pi/2)=1.0, frac(3.1415)=0.1415, int(3.1415)=3.0. Дійсні значення й операції, застосовні до них, утворюють тип дійсних з ім'ям real. Задачі 1.* Указати нормалізоване подання дійсних чисел:а) 99999; б) 0.00001 2. Написати вираз мови Паскаль, що відповідає математичному: а)* ab; в)* arcsinx; б)* ; г)* arcctgx; д) [x] для будь-якого дійсного x (додатного чи від'ємного); е)* 2p /3 (без використання Pi або сталої, схожої на 3.1415926). 3. а) Написати вираз, що задає обчислення відстані між двома точками площини за їх координатами; б)* написати оператори, що задають обчислення відстані від точки до кола в площині (точка задана координатами, коло – координатами центру й радіусом; якщо точка в колі, то відстань 0). 3.4.* Які з перерахованих вище операцій над дійсними усюди визначені, а які – ні? 1.2. Поліморфізм З означення типів цілих і дійсних чисел очевидно, що і до тих, і до інших застосовні ті самі операції: +, -, /, порівняння та інші. Але насправді ті самі знаки позначають різні операції! Наприклад, цілі додаються або порівнюються зовсім інакше, ніж дійсні. У програмуванні властивість операції бути означеною для різних типів називається поліморфізмом, а сама операція – поліморфною. За знаком операції та типами виразів, що позначають операнди в Паскаль-програмі, можна визначити, яку саме операцію слід указати в машинній програмі. І це визначається під час трансляції Паскаль-програми (або при обчисленні виразу в процесі її інтепретації). Слово "поліморфізм" буквально означає "багатоформність", тобто наявність багатьох форм у того самого змісту. У даному випадку та сама за змістом операція, наприклад, додавання, має різні машинні форми для різних типів. 1.3. Сумісність цілих і дійсних Мова Паскаль допускає різнотипні числові, тобто цілі й дійсні, операнди у виразах, наприклад, 2+1.0. При трансляції таких виразів додаються команди породження дійсного значення за цілим операндом. Отже, при обчисленні виразу насправді спочатку виконується перетворення цілого операнда в дійсний і потім указана операція над дійсними значеннями. Так, при обчисленні 2+1.0 спочатку 2 перетворюється в 2.0 і потім додаються 2.0 і 1.0. Можливість указання операндів різних типів у виразах називається сумісністю цих типів. Типи цілих і дійсних є сумісними. Є ще один вид сумісності – сумісність за присвоюванням, коли значення одного типу можна присвоювати змінним іншого. Дійсний тип сумісний за присвоюванням з цілим, але не навпаки. Наприклад, якщо a:real; b:integer, то можна написати a:=b, але не можна b:=a. Аналогічно до обчислення виразів, ціле значення перед присвоюванням перетвориться в дійсне. З цієї ж причини, до речі, при виконанні readln(z) із змінною z:real можна набрати на клавіатурі не дійсну, а цілу сталу – z одержить дійсне значення. Зворотні перетворення програміст повинен задавати явно за допомогою функцій trunc або round, наприклад, b:=round(a). Задача 3.6. Намалюйте три кола, відзначених іменами типів цілих, дійсних і бульових. Проведіть стрілки між ними – стрілка веде від кола А до кола Б, якщо означено операції з операндами типу А и значеннями типу Б, наприклад, від кола integer до кола boolean. Позначте стрілки знаками відповідних операцій. Назвіть поліморфні й неполіморфні операції.