Основи алгоритмізації та програмування Вирази в Паскалі
Exit Поняття виразу Виразом в інформатиці вважається одна або декілька величин або функцій, сполучених між собою знаками дій та знаками послідовності дій - дужками. Приклади: a+b cos(y)-sin(x)*(x+y) Зверніть увагу! Навіть одну величину можна вважати виразом. Зверніть увагу! Навіть одну величину можна вважати виразом.
Exit Види виразів у Паскалі Вираз створюють для отримання значення і подальшого його присвоювання змінній величині або передачі у процедуру (пригадайте вираз як аргумент процедури виведення WriteLn(a+b). Результатом виразу може бути значення одного із допустимих в Паскалі – ціле число, дійсне число, символ, рядок або логічна величина. Звідси і три види виразів: числові – результат виразу - число рядкові – результат виразу – рядок символів логічні – результат виразу – логічна величина
Exit Числові вирази Числові вирази складають для отримання числового результату. Вони можуть містити: величини числових типів (змінні або сталі) функції, що дають числовий результат знаки арифметичних операцій круглі дужки Приклад: (a+b)*c/234-sin(2*x-1) Приклад: (a+b)*c/234-sin(2*x-1)
Exit Арифметичні операції в числових виразах Паскаля З математики відомо, що існує чотири основних арифметичних дії: додавання – позначається знаком + (плюс) віднімання – позначається знаком - (мінус) множення – позначається знаком * (помножити) ділення – позначається знаком / (розділити)
Exit Додаткові арифметичні операції Якщо ми очікуємо числовий результат цілого типу (Integer), то не можна використовувати операцію ділення (/), так як у цьому випадку результат виразу буде дійсного типу (Real). Для цілочислових виразів використовуються спеціальні арифметичні операції: div - частка від ділення націло двох цілих величин; mod - остача від ділення націло двох цілих величин. Приклад: 9 div 4 має значення 2 9 mod 4 має значення 1 Приклад: 9 div 4 має значення 2 9 mod 4 має значення 1
Exit Арифметичні операції div та mod Операції div та mod виконуються над величинами тільки цілого типу. Результатом виконання цих дій є також цілі числа. 10 div 3 = 3 - тобто в результаті одержимо відповідь на запитання, скільки разів число 3 входить у mod 3 = 1 - тобто в результаті такої дії одержимо відповідь на запитання, скільки залишиться від числа 10, якщо вилучити з неї всі трійки.
Exit Відповідність арифметичних операцій типам Операції div та mod виконуються тільки над величинами цілого типу. Операції "*", "/", "+", "-" виконуються над величинами як цілого, так і дійсного типу. Питання лише в аналізі типу результату. Зверніть увагу! Якщо операції "*", "+", "-" виконуються над величинами, що мають цілі значення, то і отриманий результат буде цілим числом. Якщо ж хоча б одна з величин, над якими виконується дія, буде мати дійсний тип, то і результат буде дійсного типу. Виняток складає операція ділення "/". Якого б типу не були величини, над якими вона виконується, результат завжди матиме дійсний тип. Зверніть увагу! Якщо операції "*", "+", "-" виконуються над величинами, що мають цілі значення, то і отриманий результат буде цілим числом. Якщо ж хоча б одна з величин, над якими виконується дія, буде мати дійсний тип, то і результат буде дійсного типу. Виняток складає операція ділення "/". Якого б типу не були величини, над якими вона виконується, результат завжди матиме дійсний тип.
Exit Пріоритет арифметичних операцій У програмуванні так само, як і у математиці, визначений пріоритет виконання арифметичних дій, тобто визначається, яким діям надається перевага перед іншими під час обчислення значення арифметичного виразу. Наведемо арифметичні операції Паскалю саме в порядку зменшення їх пріоритетності: *, / множення та ділення; div частка від ділення націло двох цілих чисел; mod остача від ділення націло двох цілих чисел; +, - додавання та віднімання. Зверніть увагу! У Паскалі відсутня операція піднесення до степеня. Це на перший погляд здається дуже незручним. З часом до такого недоліку швидко звикають і виявляється, що без цієї операції можна обійтися. Зверніть увагу! У Паскалі відсутня операція піднесення до степеня. Це на перший погляд здається дуже незручним. З часом до такого недоліку швидко звикають і виявляється, що без цієї операції можна обійтися.
Exit Запис арифметичних виразів у Паскалі Арифметичні вирази, як і всі інші конструкції мов програмування, вводяться з клавіатури підряд, в один рядок. Тому розглянемо деякі цікаві приклади відповідності математичних записів записам на мові програмування (зверніть увагу на використання дужок та їх значення): (a+b)/(c+d) a+b/c+d a+b/c*d (a+b)/(c*d) Зверніть увагу! Починаючі програмісти часто роблять помилки у подібних виразах. За правило слід взяти те, що в математиці знак дробу має найнижчий пріоритет, тобто дробове ділення виконується останнім. В програмуванні дробового ділення не має – є лише звичайне з пріоритетом рівня множення. Зверніть увагу! Починаючі програмісти часто роблять помилки у подібних виразах. За правило слід взяти те, що в математиці знак дробу має найнижчий пріоритет, тобто дробове ділення виконується останнім. В програмуванні дробового ділення не має – є лише звичайне з пріоритетом рівня множення. Синім кольором позначені вирази Паскаля. Чорним – математичні вирази.
Exit Функції у виразах Як було сказано раніше, до складу виразу можуть входити функції. Функція - вид зв'язку між величинами, коли зміна однієї з них призводить до зміни іншої. Деякі з з функцій вам відомі з математики: sin x, cos x, tg x, тощо. Паскаль має власні стандартні (закладені в нього авторами) функції та дозволяє створити та використовувати функції користувача. Зверніть увагу! Пріоритетність обчислення функцій найвища. Зверніть увагу! Пріоритетність обчислення функцій найвища.
Exit Вимога до запису аргументів функції Зверніть увагу! У мовах програмування аргументи функції вказуються у дужках. Зверніть увагу! У мовах програмування аргументи функції вказуються у дужках. Тобто в математиці ви пишете sin x, а у Паскалі треба вказувати sin(x)
Exit Математичні функції До математичних відносять наступні функції: sin(x) -синус cos(x) - косинус arctan(x) - арктангенс (аргументи тригонометричних функцій задаються в радіанах) ехр(х) е x (експонента) Іn(х) Іnх (логарифм натуральний) abs(x)|х| (модуль) sqrt(x) sqr(x)x 2 Зверніть увагу! Для функцій від sin(x) до ln(x) аргументами можуть бути цілі або дійсні значення, а результати завжди дійсні. Для решти функцій тип результату співпадає з типом аргументу. Зверніть увагу! Для функцій від sin(x) до ln(x) аргументами можуть бути цілі або дійсні значення, а результати завжди дійсні. Для решти функцій тип результату співпадає з типом аргументу.
Exit Допоміжні математичні функції trunc(x) - ціла частина х, тобто відкидається дробова частина; х -дійсне, результат - цілий. Наприклад, trunc(-7.3)= -7 trunc(-7.5)= -7 Pi - повертає значення числа π (тобто …) аргументів немає. round(x) - заокруглення до цілого значення; х - дійсне, результат - цілий. Наприклад, round(4.2)=4, round(4.5)=5
Exit Функції перетворення chr(k) – виробляє значення символу, порядковий номер якого в таблиці ASCII-кодів рівний k; k – величина цілого числового типу, результат – величина типу Char Наприклад, chr(70)= 'F' ord(c) – виробляє ціле числове значення, що відповідає коду символу в таблиці ASCII-кодів; с – символ із таблиці ASCII-кодів, результат – ціла числова величина. Наприклад, ord(F')=70 chr(ord('F'))= 'F'
Exit Спеціальні функції для перерахованих типів pred(k) - попередній для k елемент у перерахованому типі (Integer, Char, Boolean) В якості прикладів наведемо такі: pred('B')='A', pred(10)=9 Для першого елемента типу результат невизначений. succ(k) - наступний для k елемент. Наприклад, succ('B')='C', succ(false)=true. Для останнього елемента множини результат невизначений.
Exit Функція визначення парності odd(x) - визначення непарності х; х - ціле, результат - true або false. Наприклад, odd(2)=false, odd(5)=true
Exit Формула піднесення до степеня За допомогою наведеної формули можна піднести будь-яке число до будь-якого степеня: В Паскалі ця формула матиме вигляд: ехр(ln(х)*у)
Exit Вказівка надання значення. Оператор присвоювання Ясна річ, якщо у програмі буде обчислене значення арифметичного виразу, то його необхідно десь запам'ятати для подальшого використання. Для цього існує оператор присвоювання. Загальний вигляд оператора: := Приклади: a:=7; b:=a+3; c:=a;
Exit Знак присвоювання Знак "=" слід відрізняти від знака ":=". Перший означає порівняння, умову, яку можна перевірити. Логічно використовувати його із знаком запитання: "n=m?". Другий знак ":=" означає дію, яку потрібно виконати.
Exit Робота оператора присвоювання При виконанні оператора присвоювання спочатку за заданою формулою в правій частині виконуються обчислення при поточних значеннях змінних, що входять у неї, а потім отриманим результатом замінюється попереднє значення змінної, що вказана зліва. Опираючись на принцип виконання оператора присвоювання, зрозуміло, чому зліва може стояти лише ім'я змінної величини: адже отримане значення записується у ту частину оперативної пам'яті комп'ютера, яка виділена для цієї змінної. Розглянемо приклад: a:=2; b:=3; b:=b+a; Перша вказівка присваює змінній a значення 2, друга – змінній b значення 3, у третій вказівці спочатку розраховується значення виразу b+a, яке дорівнюватиме 5, а потім це значення присваюється змінній b. Попереднє значення змінної b втрачається.
Exit Відповідність типів у вказівки присвоювання В операторі присвоювання тип змінної, якій присвоюється значення повинен бути таким як і тип результату виразу, що записаний праворуч від знака присвоювання. Наприклад, у наведеній нижче вказівці присвоювання тип змінної a повинен бути Real, бо вираз sin(x)+sin(y) після обчислення отримає значення типу Real. a:= sin(x)+sin(y);
Exit Відповідність типів у вказівки присвоювання Вирази, що беруть участь в операторі присвоювання, можуть бути не лише арифметичними. Наприклад, правомірні і такі присвоювання: ch:='a'; Іехі:='алгоритм'; flag:=true Перший приклад присвоює змінній значення типу char, другий - string, третій - boolean. Пізніше ми будемо розглядати питання обчислення виразів типу boolean.
Exit Операція зміни значення величини типу a:=a+1 Операція збільшення а на 1 позначається таким чином: а:=а+1 Її слід читати так: "а замінити на а+1". Хай, спочатку в області пам'яті, яка відведена змінній а, знаходилося поточне значення 4. Тоді виконання оператора а:=а+1 відбувалося поетапно таким чином: при обчисленні виразу справа було взято поточне значення змінної а (число 4) і до нього додалося число 1; одержане значення 5 було поміщене, в ту область пам'яті, що відведена змінній а. При цьому попереднє значення змінної а втрачається. При повторному виконанні оператора а:=а+1 змінна а отримає вже значення 6.
Exit Особливості виконання групи операцій присвоювання Цікаво розглянути такі дві послідовності операторів присвоювання: 1) m:=n, n:=k; 2) n:=k, m:=n; Ці послідовності операторів присвоювання різні стосовно збереження значення змінної n. В першому випадку значення змінної n було збережене у змінній m. В другому випадку значення змінної n було втрачено перш, ніж його можна було використовувати для заміщення змінної m. Таким чином остання послідовність операторів присвоювання фактично аналогічна такій: n:=k, m:=k
Exit Питання для самоконтролю: 1. Що називають арифметичними виразами у Паскалі? 2. Назвіть арифметичні операції Паскаля в порядку їх пріоритетності. 3. Над якими величинами можна виконувати операції div та mod? 4. Які правила запису арифметичних виразів у Паскалі? 5. Як на машинному рівні виконується оператор присвоювання?