Вступ у програмування мовою Паскаль. 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вступ у програмування мовою Паскаль.



Вступ у програмування мовою Паскаль.

Загальні відомо мості про мову Паскаль.

Мова ПАСКАЛЬ є універсальною мовою програмування високого рівня. Його основи розробив Ніклаус Вірт, професор технічного університету в Цюріху (Швейцарія), що назвав мову на честь Блєза Паскаля, знаменитого французького філософа і математика XVII сторіччя.

Створення професором Віртом мови ПАСКАЛЬ у 1971 році мало своєю метою полегшити процес навчання систематичному підходу до програмування для ЕОМ, точніше сказати, структурному програмуванню. Відтоді мова ПАСКАЛЬ використовується для програмування майже всіх типів задач на майже всіх типах ЕОМ і довгий час вважалася однією з кращих мов програмування високого рівня, незалежно від того, для яких цілей він використовується: для навчання або для програмування як аматорами так і професіоналами.

Програма, написана мовою ПАСКАЛь, складається з лексем і роздільників. Лексемами називаються мінімальні значимі одиниці тексту в програмі, написаній мовою ПАСКАЛЬ. Вони подані такими категоріями як спеціальні символи, ідентифікатори, мітки, числа, рядкові константи.

Роздільник являє собою пробіл або коментар. Дві сусідніх лексеми, якщо вони являють собою зарезервоване слово, ідентифікатор, мітку або число, повинні бути відділені одна від одної хоча б одним роздільником.

Примітка: роздільники не можуть бути частиною лексем (за винятком рядкових констант).

Зарезервоване слово – це ідентифікатор, якому в мові програмування наданий певний смисл. Це може бути ім’я операції, оператор, службове слово, тощо. Забороняється правилами мови ПАСКАЛь перевизначати зарезервовані слова (наприклад, використовувати їх для позначення інших об’єктів програми). Наступні слова являються зарезервованими в Турбо Паскаль:

and else inline procedure type

asm end interface program unit

array external interrupt record until

begin file label repeat uses

case for mod set var

const forward nil shl while

constructor function not shr with

destructor goto object string xor

div if of then

do implementation or to

downto in packed

 

Для мови ТУРБО ПАСКАЛЬ байдужний регістр клавіатури, тому можна використовувати у програмі як малі, так і великі літери. Відмінність має значення лише при записі рядкових констант.

Типи даних.

Дані в програмуванні являють собою величини, які опрацьовуються програмою. Вони поділяються на:

· константи та змінні;

· скалярні та структуровані;

· стандартні та дані користувача.

Константи – це величини, що не змінюють своїх значень в ході виконання програми. Змінні – об’єкти, що можуть приймати різні значення. Але це не означає, що змінна обов’язково повинна прийняти інше значення. Далі вважатимемо, основним об’єктом програми є змінна.

Скалярні величини являють собою прості значення. Тобто, скалярний об’єкт може приймати в будь-який момент виконання програми лише одне якесь значення. Структуровані величини складаються з декількох значень, тобто, одній величині відповідає деякий набір значень одразу.

Стандартні величини реалізовані в трансляторі мови ПАСКАЛЬ, тому їх можна використовувати без додаткового оголошення. Крім того, користувач може оголошувати і використовувати власні величини, які називаються даними користувача.

Тип даних визначає множину значень, що може приймати змінна. Кожній змінній в програмі необхідно задати один, і тільки один тип даних. Хоча ПАСКАЛЬ може опрацьовувати достатньо складні типи даних, усі вони складаються з простих (неструктурованих) типів.

Вивчення типів даних розпочнемо зі скалярних стандартних типів даних. Їх в ПАСКАЛІ є чотири: integer (тип цілих чисел), real (тип дійсних чисел), char (літерний тип) та boolean (логічний тип).

У ТУРБО ПАСКАЛЬ існує п’ять вбудованих цілочисельних типів: Shortint (коротке ціле), Integer (ціле), Longint (довге ціле), Byte (довжиною в байт) і Word (довжиною в слово). Кожний тип визначає певну підмножину цілих чисел, як це показано таблиці 4.1.

 

Таблиця 4.1 Вбудовані цілочисельні типи

Тип Діапазон Формат
Shortint -128.. 127 8 бітів із знаком
Integer -32768.. 32767 16 бітів із знаком
Longint -2147483648.. 2147483647 32 біта зі знаком
Byte 0.. 255 8 бітів без знака
Word 0.. 65535 16 бітів без знака

 

До дійсного типу відноситься підмножина дійсних чисел, що можуть бути подані у форматі з плаваючою точкою з фіксованим числом цифр.

Є п’ять видів дійсних типів: Real, Single, Double, Extended і Comp.

Дійсні типи розрізняються діапазоном і точністю пов’язаних з ними значень. Основним є перший тип, тому детально зупинимось саме на його вивченні.

Перш за все, дані дійсного типу можуть подаватись у двох формах: з фіксованою точкою та плаваючою точкою (експоненційній формі). Перша форма подання чисел більш звична. В ній явно задана ціла та дробова частина, які відокремлені точкою Так, числа 2.729, -89.084109, 134 подані у формі з фіксованою точкою.

Експоненційна форма подає число у так званому нормалізованому вигляді: мантиси і порядку. Мантиса лежить у діапазоні [1; 10) і складається з 12 символів: однієї цифри на цілу частину, одного символу на десяткову точку і десяти цифр на дробову частину. Якщо дробова частина містить менше цифр, то решта заповнюється нулями. Порядок складається з чотирьох символів і починається літерою Е, після якої йде знак порядку та дві цифри – його значення. Приклад запису чисел поданий в таблиці 4.2.

Таблиця 4.2. Запис дійсних чисел

Форма з фіксованою точкою Експоненційна форма
1.4529 1.4529000000Е+00
  3.9870000000Е+04
0.000029 2.9000000000Е-05

 

Дані булевого типу (іноді його називають логічним) можуть приймати значення, обумовлені стандартними ідентифікаторами true (істина) і false (неправда). При виконанні операцій відношення вважають справедливим співвідношенням: false<true. Змінна булевого типу займає в пам’яті 1 байт.

Значенням змінної літерного типу може бути один із символів, що входять у таблицю символів.. Символи впорядковані один щодо одного відповідно до їх значень в коді ASCII, наприклад: “А” < “У”. Значення кодів символів у ASCII змінюються від 0 до 255. Змінна символьного типу займає один байт пам’яті

Запис арифметичних виразів.

Виразами називаються алгоритмічні конструкції мови, що визначають правила для обчислення значень змінних величин. Вираз складається з операндів: змінних, констант, назв функцій, що відокремлюються один від одного за допомогою операторів.

У наступних таблицях наведені типи операндів і результати для бінарних і унарних арифметичних операцій, а також основні арифметичні функції.

Будь-який операнд, тип якого є піддіапазоном порядкового типу, опрацьовується так, якби він був порядкового типу.

Якщо обидва операнди в операторах +, -, *, div або mod є операндами цілого типу, то тип результату є таким же, як спільний тип обох операндів.

Якщо при використанні оператора збереження знака або оператора заперечення знака операнд має цілий тип, то результат є того ж цілого типу. Якщо операнд дійсного типу, то тип результату є Real.

Значення виразу x/y завжди є Real незалежно від типів операндів. Якщо y дорівнює 0, то виникає помилка.

Значення виразу i div j являє собою цілу частину від ділення i/j. Якщо j дорівнює 0, то виникає помилка. Наприклад, 25 div 4 = 6, 21 div 3 = 7.

Оператор mod повертає залишок, отриманий при діленні двох його операндів. Наприклад, 25 mod 4 = 1, 21 mod 3 = 0.

Знак результату оператора mod є тим же, що і знак змінної i. Якщо j дорівнює 0, то виникає помилка.

 

Таблиця 4.3 Бінарні арифметичні операції

Оператор Операція Тип операндів Тип результату
+ додавання цілий цілий
дійсний дійсний
віднімання цілий цілий
дійсний дійсний
* множення цілий цілий
дійсний дійсний
/ ділення цілий дійсний
дійсний дійсний
div цілочисельне ділення цілий цілий
mod залишок цілочисельного ділення цілий цілий

 

Таблиця 4.4 Унарні арифметичні операції

Оператор Операція Тип операндів Тип результату
+ збереження знака цілий цілий
    дійсний дійсний
- заперечення знака цілий цілий
    дійсний дійсний

 

Таблиця 4.5. Основні арифметичні функції.

Математичний запис Запис в ПАСКАЛІ Тип операнду Тип результату
1. sin x sin(x) real real
2. cos x cos(x) real real
3. ex exp(x) real real
4. ln x ln(x) real real
5. |x| abs(x) real real
6. integer integer
7. x2 sqr(x) real real
8. integer integer
9. sqrt(x) real real

 

Приклади запису арифметичних виразів. виразів

Математичний запис Запис мовою ПАСКАЛЬ
(a+b)/(c*d)
exp(x+1)*(a-x)
sqr(sin(x*x*x))
sin((2*x)/(x+1))/cos(((2*x)/(x+1))
exp(1/3*ln(x+1))

Зауважимо, що можливі й інші вірні варіанти запису виразів.

Begin

< оператори >

End.

Розглянемо кожен блок детальніше.

Заголовок програми розпочинається зі службового слова program, після якого вказується ім’я програми. Він грає допоміжну функцію і ніякої суттєвої ролі для самої програми не має.

ПРИКЛАД:

program circles;

Не слід плутати заголовок програми та ім’я відповідного дискового файлу. Ці імена ніяк між собою не пов’язані. В більшості випадків користувачі не вказують заголовок.

У блоку описів оголошуються всі ідентифікатори, що використовуються в програмі (основному модулі). Блок описів, у свою чергу, може містити шість розділів:

· розділ підключення модулів процедур та функцій;

· розділ опису міток;

· розділ опису констант;

· розділ визначення типів;

· розділ опису змінних;

· розділ опису процедур і функцій.

Транслятор мови ПАСКАЛЬ створений таким чином, що основний файл не містить всіх процедур та функцій. Вони згруповані і реалізовані в окремих файлах, які називаються модулями стандартних процедур та функцій. Наприклад, модуль CRT містить функції для роботи з екраном в текстовому режимі, GRAPH – функції для роботи з екраном в графічному режимі. Крім того, користувач може створювати власні модулі процедур та функцій. В розділі uses здійснюється підключення необхідних модулів процедур та функцій. Програма може містити лише один розділ uses, причому він повинен бути завжди першим у блокові описів. Якщо жоден з модулів не підключається, то цей розділ відсутній.

ПРИКЛАДИ:

uses dos, graph;

uses my_lib;

Розділ оголошення міток призначений для вказівки міток операторів. Перед будь-яким оператором програми можна поставити мітку. Це дозволить виконувати прямий перехід на цей оператор при виконанні команди GOTO. Розділ опису міток має таку структуру: спочатку записується зарезервоване слово label (мітка), за ним слідує список ідентифікаторів міток, відділених одна від одної комами. В мові TУРБО ПАСКАЛЬ в ролі міток можуть бути використані як числа, так і ідентифікатори.

ПРИКЛАД:

label 10,999;

label new, errors;

У розділі визначення констант здійснюється присвоювання ідентифікатором визначених постійних значень. На початку розділу визначення констант пишеться слово const (константа). Слідом за цим словом іде список імен і після символу “=” відповідні їм вирази, у яких ідентифікаторам присвоюються визначені постійні значення. Елементи списку відокремлюються один від одного крапкою з комою.

ПРИКЛАД:

Const

max = 1024;

password = ‘Sezam’;

limit=2*max;

Розділ оголошення типів призначений для введення типів даних користувача. Практично всі структуровані типи даних є типами даних користувача і повинні описуватись у даному розділі. Розділ визначення типів починається зарезервованим словом type (тип). За словом type слідують визначення типів, розділених один від одного крапкою з комою. Кожне визначення типу складається з ідентифікатора типу, знака рівності і самого опису типу.

ПРИКЛАД:

type

day = (пн, вт, ср, чт, пт, сб, вс);

colors= (синій, червоний, зелений);

Зауважимо, що в останньому прикладі значення задаються без лапок (це не значення рядкового типу, а значення зліченого типу!).

Розділ оголошення змінних є найважливішим в блокові оголошень. Кожна змінна, що зустрічається в програмі, повинна бути описана, тобто, повинен бути вказаний її тип. Опис змінної повинен передувати використанню її в тексті програми для того, щоб у момент використання вона була вже “знайома” компілятору.

Розділ опису змінних починається зарезервованим словом var (від variable - змінна). Слідом за ним йде список, записи якого мають таку структуру: спочатку через кому перераховується один або декілька ідентифікаторів змінних, потім ставиться двокрапка і після двокрапки вказується тип перерахованих змінних.

ПРИКЛАД:

var

a, b, result: real;

i, j, x, y: integer;

period: day;

Мова ПАСКАЛЬ припускає також оголошення змінних безпосереднім описом змінних.

ПРИКЛАД:

var

nt: 1..20;

anser: (yes, no);

Таке оголошення має свої обмеження на використання змінних, і тому зловживати ним не рекомендується.

Розділ опису процедур та функцій служить для визначення допоміжних алгоритмів (процедур та функцій користувача) у рамках поточного модуля або програми. Цей розділ не має службового слова для початку розділу, тому що кожна процедура або функція користувача має своє службове слово для початку свого оголошення.. Детально цей процес буде розглянутий далі.

Кожен з описових розділів, крім розділу uses, може зустрічатись в програмі декілька разів і в будь-якій послідовності. Головне, щоб не порушувалась логічна структура програми (наприклад, змінна типу користувача не оголошувалась раніше самого типу, тощо).

Розділ операторів є останнім у блоці програми. Він задає дії, які повинна виконати програма. Розділ операторів починається службовим словом begin і закінчується службовим словом end. (крапка в кінці обов’язкова). Кожна програма може мати лише один розділ операторів.

Узагальнення по темі.

Програма, написана мовою ПАСКАЛь, складається з лексем і роздільників. Лексемами називаються мінімальні значимі одиниці тексту в програмі, написаній мовою ПАСКАЛЬ. Вони подані такими категоріями як спеціальні символи, ідентифікатори, мітки, числа, рядкові константи.

Роздільник являє собою пробіл або коментар. Дві сусідніх лексеми, повинні бути відділені одна від одної хоча б одним роздільником.

Зарезервоване слово – це ідентифікатор, якому в мові програмування наданий певний смисл. Це може бути ім’я операції, оператор, службове слово, тощо. Забороняється правилами мови ПАСКАЛь перевизначати зарезервовані слова.

Дані в програмуванні являють собою величини, які опрацьовуються програмою. Вони поділяються на:

· константи та змінні;

· скалярні та структуровані;

· стандартні та дані користувача.

Константи – це величини, що не змінюють своїх значень в ході виконання програми. Змінні – об’єкти, що можуть приймати різні значення.

Скалярні величини являють собою прості значення. Структуровані величини складаються з декількох значень, тобто, одній величині відповідає деякий набір значень одразу.

Стандартні величини реалізовані в трансляторі мови ПАСКАЛЬ, тому їх можна використовувати без додаткового оголошення. Крім того, користувач може оголошувати і використовувати власні величини, які називаються даними користувача.

Тип даних визначає множину значень, що може приймати змінна. Кожній змінній в програмі необхідно задати один, і тільки один тип даних. Хоча ПАСКАЛЬ може опрацьовувати достатньо складні типи даних, усі вони складаються з простих (неструктурованих) типів.

ПАСКАЛЬ має чотири стандартних скалярних типи даних: integer (тип цілих чисел), real (тип дійсних чисел), char (літерний тип) та boolean (логічний тип).

Виразами називаються алгоритмічні конструкції мови, що визначають правила для обчислення значень змінних величин. Вираз складається з операндів: змінних, констант, назв функцій, що відокремлюються один від одного за допомогою операторів.

Програма, написана мовою ПАСКАЛЬ, являє собою послідовність рядків, кожен з яких відокремлюється від іншого символом “;” (крапка з комою). Вона складається з трьох частин: заголовка, блока описів та блока операторів.

Заголовок задає ім’я програмі. Блок описів оголошує всі об’єкти, які використовуються програмою: мітки, константи, типи користувача, змінні, тощо. Блок операторів задає дії, які направлені на розв’язання завдання.

Загальний вид програми на мові ПАСКАЛЬ має вигляд:

Program <ім’я програми >

Uses < модулі >

Const < константи >

Label < мітки >

Type < типи користувача >

Var < змінні >

Begin

< оператори >

End.

 

 

Поняття даного.

Під даним розуміють об’єкт – порцію інформації, що зберігається в пам’яті комп’ютера, має значення деякої множини допустимих значень і над якими визначені допустимі операції.

В інформатиці дане може мати не лише числові значення. Ним може бути також текст, звук, картинка, фотографія чи фрагмент відеофільму. Дані бувають сталі і змінні.

Стале дане не може змінити свого значення під час виконання програми. Прикладами сталих цілих даних є числа: 5, -10, 0, -1256.

Поняття змінної.

Змінна може набувати різних значень. Фізичний зміст змінної, змінна – це ділянка оперативної пам’яті, куди комп’ютер записує або звідки читає дане. Змінна характеризується іменем, значенням і обсягом в байтах. Значення змінній надають командою присвоєння чи командою введення даних. Кількість потрібних змінних та їхні імена визначає користувач під час складання алгоритму і програми розв’язування задачі.

Дані цілого типу.

Людина розуміє числа і тексти візуально. Комп’ютер такої здатності немає, тому користувач зобов’язаний пояснити транслятору, з якими даними він матиме справу: числами чи текстами тощо. Тому дані класифікують за типами. Розрізняють дані цілого типу, дійсного та інших типів, які вивчатимемо далі.

Дані, значення яких є цілі числа, можуть належати до таких типів:

Назва типу Пояснення Обсяг
byte Цілі дуже короткі (1 байт)
integer Цілі короткі (2 байт)
longint Цілі довгі (4 байт)

 

Цілі дуже короткі дані мають значення від 0 до 255, цілі короткі дані належать до діапазону від –32768 до 32767, а довгі від –2147483648 до 2147483647. найчастіше застосовують тип integer.

Розділ оголошення змінних.

Розв’язуючи задачу, користувач має проаналізувати, скільки змінних треба використати і до якого типу їх віднести. Змінні потрібні оголосити на початку програми у розділі оголошення змінних var, який має такий загальний вигляд:

var <перший список імен змінних>:<назва типу 1>; <n-й список імен змінних>:<назва типу n>;

 

Приклад 2. Нехай у деякій задачі для позначення кількості студентів у двох групах вирішили використати величини з іменами n1, n2. зрозуміло, що відповідні змінні n1, n2 не можуть набувати дробового значення. Змінні n1, n2 належать до даних цілого типу, тому їх потрібно оголосити так:

var n1, n2: integer

Оголошення змінних дають змогу компілятору зарезервувати у пам’яті комп’ютера потрібну кількість комірок для зберігання даних під час роботи програми. Правило, яке варто запам’ятати твердо:

Елементи списку відокремлюють комою, а команди – крапкою з комою.

Задача 1. Від міста А до В автомобіль їхав t1 = 5 год. з середньою швидкістю V1 = 70 км/год., від В до С – t2 = 4 год., зі швидкістю V2 = 75 км/год., визначити відстань між містами.

Program distance;

var

t1, v1, t2, v2, ab, bc, ac: integer;

begin

t1: = 5; t2: = 4; v1: = 70; v2: = 75;

ab:= v1* t1; bc:= v2* t2; ac:=ab+bc;

writeln (ab:6, bc:6, ac:6);

end.

Виконаємо програму і на екрані отримаємо:

     

Дані дійсних типів.

Дані, значення яких є дійсні числа, можуть належати до таких типів (найчастіше використовують тип real):

 

single Дійсні короткі (4 байти)
real Дійсні (6 байтів)
double Дійсні довгі (8 байтів)
extended Дійсні дуже довгі (12 байтів)

 

Дійсні короткі та просто дійсні дані – це числа у звичайному (з десятковою крапкою) чи показниковому форматі mep з максимальним значенням1038, а довгі – це числа у звичайному чи показниковому форматі mep з мак4симальним значенням 10308.

Значення дійсного числа в інформатиці записують так:

mep = m*102

 

Де m – мантиса, Е – хнова десяткової системи числення, р – порядок.

 

Приклад 1.

6.25Е+01=6.25*101=62.5;

-0.12500Е+01=-0.125*101=-1.25;

3.1415Е-06=3.1415*10-6=0.0000031415

 

Приклад 2. Нехай відомо, що маса деякої речовини може набувати не цілочислового значення (1,5 кг тощо). Масі речовини поставлено у відповідність змінну з іменем ________. Тому змінну маса оголосити як дане числового дійсного типу так:

var masa: real.

 

Дані типу String

Дані, значеннями яких є група символів (слово або деякий текст), називають текстовими (інший термін - рядки). Назва цього типу даних – string. Ознакою текстової сталої, є одинарні ланки (апострофи), між якими записана група символів, а саме: “5”, “Lviv”,“Київ”. Отже 2001 – це ціла числова стала, а “2001” – текстова стала. Якщо текст містить апостроф, то він дублюється, наприклад “ім’я”. Текстові дані типу string можуть містити до 255 символів, однак часто потрібна менша кількість символів n, яку задають в описах так: string [n].

 

Приклад 3. Оголосити змінні а1, а2, а3 як дійсні, в1, в2 – як цілі, а с1 – як текстову можна так:

var а1 а2 а3: real;

в1, в2: integer; c1:string;

 

Вправи та задачі

 

Складіть алгоритми розв’язування наступних задач (вважаючи, що всі вхідні дані і результати є цілими числами – даними типу integer).

1. Визначіть силу F, що діє на тіло з масою m, яке рухається з прискоренням а (формула F= mа)?

 

 

Виконуємо програму і на екрані отримуємо: 40.

 

2. Обчисліть вартість а театральних квитків по 4 грн. і в квитків по

6 грн. окремо і всіх разом.

 

Program syla;

Var

a, c1, b, c2, v1, v2, v: integer;

begin

c1:=4; c2:=6; a:=20; b:=15; v:= v1+v2;

writeln (v1:6, v2:6, v:6);

readln

end.

Виконуємо програму і на екрані отримуємо:

 

 


3. Від міста А до В автомобіль їхав t1 год. зі швидкістю V1 км/год., від В до С – t2 год. зі швидкістю V2 км/год., від С до D – t3 год. зі швидкістю V3 км/год.,

Визначіть відстань між містами і пройдений шлях.

 

Programviostane;

Var

t1, V1, t2, V2, t3, V3, ab, bc, cd, ad: integer;

begin

t1:=6; t2:=3;t3:=5; V1:=60; V2:=65; V3:=80;

ab:= V1* t1; bc:= V2* t2; cd:= V3* t3; ad:=ab+bc+cd

writeln (ab:6, bc:6, cd:6, ad:6);

readln

end.

Виконуємо програму і на екрані отримуємо:

 

 


Тип дійсних

Дійсні числа позначаються дійсними сталими. Розглянемо приклад. Число 1.2345 можна позначити багатьма різними способами, наприклад, 123.45´ 10-2. Тут воно має цілу частину 123, дробову частину .45 і десятковий порядок -2. Цьому запису відповідає стала мови Паскаль 123.45E-2, у якій 123 – ціла частина, .45 – дробова, а E-2 – порядок. Це ж число можна задати сталою 0.12345E1 або 0.012345E+2, або 1.2345, або 12345e-04. Подання числа сталою, у якій перед десятковою крапкою записано єдину цифру від 1 до 9, називається нормалізованим, наприклад, 9.81 або 1.0E2 (число 0 має нормалізоване подання 0.0).

Дійсні сталі мають обов'язкову цілучастину, за якою записано дробовучастину і порядок (можливо, одне з них). Ціла частина – це непорожня послідовність цифр, дробова – непорожня послідовність цифр із крапкою на початку, а порядок буква "E" або "e", можливо, із знаком "+" або "-", і однією або двома цифрами. Перед сталою може бути знак "-", і тоді вона задає від'ємне число: -12.345E-1.

Не уточнюючи множину представних дійсних чисел, скажемо лише, що вона:

  • є скінченною обмеженою підмножиною множини раціональних чисел;
  • містить усі цілі числа, представні в типі integer (і багато інших, але все одно їх скінченна множина!).

Як бачимо, цілі числа задаються як цілими сталими, так і дійсними, наприклад, 2 і 2.0. Проте їм відповідають два цілком різних подання того самого числа, тобто значення двох різних типів. І в машині вони обробляються по-різному.

До дійсних значень застосовні ті ж самі арифметичні операції, що й до цілих, за винятком odd, div, mod і деяких інших, про що ми скажемо в розділі 10. Їх можна порівнювати (=, <>, > тощо), і до них, і лише до них, застосовні дві операції round і trunc. Вони задаються у вигляді викликів функцій: round(3.62), trunc(2.71) тощо. Перша породжує ціле значення, найближче до операнда, наприклад, round(4.12)=4, round(3.62)=4, а друга – значення математичної функції "ціла частина", що позначається [ x ]: trunc(3.62)=3. Останнє твердження, утім, є не зовсім точним, тому що для від'ємного числа x значенням trunc(x) є не [ x ], а -[-x]: trunc(-3.14)=-3, хоча в математиці [-3.14]=-4.

За числовим значенням x, цілим або дійсним, можна обчислити дійсне значення "математичної функції"

| x |, , sin x, cos x, arctg x, e x, ln x.

Вираз із числовим значенням записується як аргумент у виклику функції з ім'ям відповідно

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; в)* arcsin x;

б)* ; г)* arcctg x;

д) [ x ] для будь-якого дійсного x (додатного чи від'ємного);

е)* 2p /3 (без використання Pi або сталої, схожої на 3.1415926).

3. а) Написати вираз, що задає обчислення відстані між двома точками площини за їх координатами;

б)* написати оператори, що задають обчислення відстані від точки до кола в площині (точка задана координатами, коло – координатами центру й радіусом; якщо точка в колі, то відстань 0).

3.4. * Які з перерахованих вище операцій над дійсними усюди визначені, а які – ні?

Поліморфізм

З означення типів цілих і дійсних чисел очевидно, що і до тих, і до інших застосовні ті самі операції: +, -, /, порівняння та інші. Але насправді ті самі знаки позначають різні операції! Наприклад, цілі додаються або порівнюються зовсім інакше, ніж дійсні.

У програмуванні властивість операції бути означеною для різних типів називається поліморфізмом, а сама операція – поліморфною. За знаком операції та типами виразів, що позначають операнди в Паскаль-програмі, можна визначити, яку саме операцію слід указати в машинній програмі. І це визначається під час трансляції Паскаль-програми (або при обчисленні виразу в процесі її інтепретації).

Слово "поліморфізм" буквально означає "багатоформність", тобто наявність багатьох форм у того самого змісту. У даному випадку та сама за змістом операція, наприклад, додавання, має різні машинні форми для різних типів.

Сумісність цілих і дійсних

Мова Паскаль допускає різнотипні числові, тобто цілі й дійсні, операнди у виразах, наприклад, 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. Позначте стрілки знаками відповідних операцій. Назвіть поліморфні й неполіморфні операції.

Комп'ютер сам вирішить,

Що робити і чого не робити

Then

оператор

Else

оператор

або

if умова then

оператор

else оператор

Виконання його полягає в тім, що спочатку обчислюється значення умови, записаної після слова if. Далі, якщо цим значенням є true, виконується оператор, записаний після слова then, і на цьому виконання закінчується. Але якщо це значення хибне, те виконується не перший, а другий оператор, записаний після else. Наприклад, при виконанні послідовності операторів

readln(x);

if x>=0 then z:= 1 else z:= -1

змінна z одержить значення 1, якщо прочитано невід'ємне значення x. Якщо ж прочитано значення від'ємне, то z одержить значення –1.

Оператор розгалуження в скороченій формі має вигляд:

if умова then оператор

Він відрізняється лише тим, що якщо обчислення умови дає значення false, то на цьому його виконання закінчується.

Як бачимо, оператори розгалуження містять умови, з обчислення яких і починається їх виконання. Тому ці оператори ще називаються умовними.

Застосуємо оператори розгалуження для перекладу алгоритму обчислення коренів на мову Паскаль. Пункт (3) можна, здавалося б, перекласти так:

if d>0 then x1:=(-b- sqrt(d))/(2*a); x2:=(-b+sqrt(d))/(2*a)

Else

if d=0 then x1:=-b/(2*a);

{інакше нічого не робити}

Але це неправильно! Оператор розгалуження закінчується оператором присвоювання змінній x1. Оператор x2:= (-b+sqrt(d))/(2*a) записано уже за роздільником ";", тобто після оператора розгалуження. Те, що написано далі, взагалі не є оператором.

Як же записати послідовність із двох або більше операторів там, де має бути один? Напрошується відповідь, що їх треба взяти в дужки. І такі дужки, що перетворюють послідовність операторів у один оператор, у мові Паскаль є. Це так звані відкриваюча та закриваюча операторні дужки: ключові слова begin і end (початок і кінець).

Запис вигляду

begin послідовність операторів end

називається складенимоператором.

Отже, опишемо обчислення одного або двох коренів таким оператором розгалуження в повній формі:

if d>0 then

begin x1:=(-b+sqrt(d))/(2*a); x2:=(-b-sqrt(d))/(2*a) end

Else

if d=0 then x1:=-b/(2*a)

Як бачимо, після слова then записано складений, а після слова else – оператор розгалуження в скороченій формі.

Оформимо алгоритм обчислення коренів у вигляді програми:

program roots(input, output);

var a, b, c: real; x1, x2: real;

Begin

{1} readln(a,b,c); {припускаємо, що a<>0! }

{2} d:=b*b-4*a*c;

{3} if d>0 then

Begin

x1:=(-b+sqrt(d))/(2*a);

x2:=(-b-sqrt(d))/(2*a)

End

Else

if d=0 then x1:=-b/(2*a)

end.

Якщо при виконанні цієї програми задати значення змінних a, b, c, наприклад, відповідно 1, 3, 2, то справджується d>0, і обчислюються x1 і x2. Якщо задати значення 1, 2, 3, то умова d>0 хибна, обчислюється умова d=0, її значенням є false, і на цьому все закінчується. При значеннях 1, 2, 1 умова d=0 істинна, і обчислюється лише x1.

До програми слід додати оператори виведення, щоб вона не була занадто "мовчазною". Це залишається як вправа.

І останнє зауваження щодо структури операторів розгалуження. Розглянемо такий оператор:

if z>0 then if z>5 then k:=2 else k:=1

Хибності якої умови, z>0 чи z>5, відповідає else -гілка? Тобто чи є оператор



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 173; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.217.67.16 (0.23 с.)