Скачать презентацию Програмування на мові Паскаль Тема 1 Вступ Скачать презентацию Програмування на мові Паскаль Тема 1 Вступ

programuvanna_na_movi_pascal.ppt

  • Количество слайдов: 159

Програмування на мові Паскаль Тема 1. Вступ Програмування на мові Паскаль Тема 1. Вступ

Алгоритм – це чітко визначений план дій для виконавця. Властивості алгоритму • дискретність: складається Алгоритм – це чітко визначений план дій для виконавця. Властивості алгоритму • дискретність: складається з окремих кроків (команд) • зрозумілість: повинен включати тільки команди відомі для виконавця (які містяться в СКВ) • визначеність: при однакових вхідних даних завжди видає один і той самий результат • скінченність: закінчується за скінчену кількість кроків • масовість: може застосовуватися багатократно при різних вихідних даних • коректність: видає правильне рішення при будьяких допустимих вихідних даних

Програма – це • алгоритм, записаний на будь-якій мові програмування • набір команд для Програма – це • алгоритм, записаний на будь-якій мові програмування • набір команд для комп’ютера Команда – це опис дій, які повинен виконати комп’ютер. • звідки отримати вихідні дані? • що потрібно з ними зробити?

Мови програмування • Машинно-орієнтовані (низького рівня) – кожна команда відповідає одній команді процесора (асемблер) Мови програмування • Машинно-орієнтовані (низького рівня) – кожна команда відповідає одній команді процесора (асемблер) • Мови високого рівня – наближені до реальної (англійської) мови, легше сприймаються людиною, не залежать відповідного комп’ютера • для навчання: Бейсик, ЛОГО, Паскаль • професійні: Сі, Фортран, Паскаль • для задач штучного інтелекту: Пролог, ЛИСП • для Інтернету: Java. Script, Java, Perl, PHP, ASP

Мова Паскаль 1970 – Ніклаус Вірт (Швейцарія) • мова для навчання студентів • розробка Мова Паскаль 1970 – Ніклаус Вірт (Швейцарія) • мова для навчання студентів • розробка програм “зверху-вниз” Задача Підзадача 1 1. 2 1. 3 Підзадача 2 2. 1 2. 2 Підзадача 3 2. 3 3. 1 3. 2 3. 3 • різноманітні структури даних (масиви, структури, множини)

З чого складається програма? program <ім’я програми>; const …; {константи} var …; {змінні} { З чого складається програма? program <ім’я програми>; const …; {константи} var …; {змінні} { процедури і функції } begin … {основна програма} end. коментарі у фігурних дужках не опрацьовуються

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

Імена програм, констант, змінних Імена можуть містити • латинські букви (A-Z) великі і маленькі Імена програм, констант, змінних Імена можуть містити • латинські букви (A-Z) великі і маленькі букви не розрізняються • цифри ім’я не може починатися з цифри • знак підкреслення _ Імена НЕ можуть містити • українські букви • пропуски • дужки, знаки +, =, !, ? та ін. Які імена правильні? AXby R&B 4 Wheel Вася “Pes. Barbos” TU 154 [Qu. Qu] _ABBA A+B

Константи const i 2 = 45; { ціле число } pi = 3. 14; Константи const i 2 = 45; { ціле число } pi = 3. 14; { дійсне число } ціла і дробова частина відділяються крапкою qq = 'Вася'; { рядок символів } можна використовувати українські букви! L = True; { логічна величина } Може приймати два значення: • True (істина, “так") • False (хибність, "ні")

Змінні Змінна – це величина, яка має ім’я, тип і значення. Значення змінної величини Змінні Змінна – це величина, яка має ім’я, тип і значення. Значення змінної величини під час виконання програми може змінюватися. Типи змінних: • integer { цілі } • real { дійсні } • char { один символ } • string { рядок } • boolean { логічні } Оголошення змінних (виділення пам’яті): var a, b: integer; Q: real; s 1, s 2: string;

Як змінюється значення змінної? Оператор – це команда мови програмування високого рівня. Оператор присвоєння Як змінюється значення змінної? Оператор – це команда мови програмування високого рівня. Оператор присвоєння служить для зміни значення змінної. Приклад: program qq; a var a, b: integer; 5 ? 5 begin b a : = 5; 5+2 ? 7 b : = a + 2; a a : = (a + 2)*(b – 3); 7*4 28 5 end.

Оператор присвоєння Загальна структура: <ім’я змінної> : = <вираз>; Арифметичні вирази можуть містити • Оператор присвоєння Загальна структура: <ім’я змінної> : = <вираз>; Арифметичні вирази можуть містити • константи • імена змінних • знаки арифметичних дій: + * / div mod множення ділення • виклики функцій • круглі дужки ( ) ділення націло остача від ділення

Які оператори неправильні? program qq; var a, b: integer; x, y: real; begin ім’я Які оператори неправильні? program qq; var a, b: integer; x, y: real; begin ім’я змінної повинно знаходитися зліва від знака : = a : = 5; ціла і дробова частина 10 : = x; відділяються крапкою y : = 7, 8; неможливо записати дійсне b : = 2. 5; значення в цілу змінну x : = 2*(a + y); a : = b + x; end.

Ручна прокрутка програми program qq; var a, b: integer; begin a : = 5; Ручна прокрутка програми program qq; var a, b: integer; begin a : = 5; b : = a + 2; a : = (a + 2)*(b – 3); b : = a div 5; a : = a mod b; a : = a + 1; b : = (a + 14) mod 7; end. a b ? ? 5 7 28 5 3 4 4

Порядок виконання операцій • обчислення виразів у дужках • множення, ділення, div, mod зліва Порядок виконання операцій • обчислення виразів у дужках • множення, ділення, div, mod зліва направо • додаванні і віднімання зліва направо 2 3 5 4 1 7 8 6 9 z : = (5*a*c+3*(c-d))/a*(b-c)/ b; 2 6 3 4 7 5 1 12 8 11 10 9 x: =(a*a+5*c*c-d*(a+b))/((c+d)*(d-2*a));

Додавання двох чисел Задача. Ввести два цілих числа і вивести на екран їх суму. Додавання двох чисел Задача. Ввести два цілих числа і вивести на екран їх суму. Найпростіше розв’язання: program qq; var a, b, c: integer; begin read ( a, b ); c : = a + b; writeln ( c ); end.

Оператор введення read ( a ); { ввести значення змінної a} read ( a, Оператор введення read ( a ); { ввести значення змінної a} read ( a, b ); { ввести значення змінних a і b} Як вводяться два числа? 25 a 30 b через пропуск: 25 30 через Enter: 25 30 25 a 30 b

Оператор виведення write ( a ); { вивести значення змінної a} writeln ( a Оператор виведення write ( a ); { вивести значення змінної a} writeln ( a ); { вивести значення змінної a і перейти на новий рядок} writeln ( ‘Привіт!' ); { виведення тексту} writeln ( ‘Відповідь: ', c ); {виведення тексту і значення змінної c} writeln ( a, '+', b, '=', c );

Формати виведення program qq; var i: integer; x: real; begin всього i : = Формати виведення program qq; var i: integer; x: real; begin всього i : = 15; символів writeln ( '>', i, '<' ); writeln ( '>', i: 5, '<' ); x : = 12. 345678; writeln ( '>', x, '<' ); writeln ( '>', x: 10, '<' ); writeln ( '>', x: 7: 2, '<' ); end. всього символів в дробовій частині >15< >1. 234568 E+001< > 1. 23 E+001< > 12. 35<

Повний розв’язок program qq; var a, b, c: integer; begin writeln(‘Ввести два цілих числа'); Повний розв’язок program qq; var a, b, c: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); c : = a + b; writeln ( a, '+', b, '=', c ); end. Протокол: це виводить комп'ютер Ввести два цілих числа 25 30 це вводить користувач 25+30=55

Блок-схема лінійного алгоритму початок блок «початок» ввести a, b блок «ввести» c : = Блок-схема лінійного алгоритму початок блок «початок» ввести a, b блок «ввести» c : = a + b; вивести c кінець блок «процес» блок «вивести» блок «кінець»

Завдання Завдання "4": Ввести три числа, знайти їх суму і добуток. Приклад: Ввести три числа: 4 5 7 4+5+7=16 4*5*7=140 "5": Ввести три числа, знайти їх суму, добуток і середнє арифметичне. Приклад: Ввести три числа: 4 5 7 4+5+7=16 4*5*7=140 (4+5+7)/3=5. 33

Програмування на мові Паскаль Тема 2. Розгалуження Програмування на мові Паскаль Тема 2. Розгалуження

Алгоритми розгалуження Задача. Ввести два цілих числа і вивести на екран більше з них. Алгоритми розгалуження Задача. Ввести два цілих числа і вивести на екран більше з них. Ідея розв’язання: потрібно вивести на екран перше число, якщо воно більше другого, або друге, якщо воно більше першого. Особливості: дії виконавця залежать від деяких умов (якщо … інакше …). Алгоритми, в яких послідовність кроків залежить від виконання деяких умов, називаються розгалуженими.

Варіант 1. Блок-схема початок ввести a, b так a > b? max: = a; Варіант 1. Блок-схема початок ввести a, b так a > b? max: = a; блок «логічний вираз» повна форма розгалуження ні max: = b; вивести max кінець ? Якщо a = b?

Варіант 1. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих Варіант 1. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); повна форма if a > b then begin умовного max : = a; оператора end else begin max : = b; end; writeln (‘Більше число ', max); end.

Умовний оператор if <умова> then begin {що робити, якщо умова правильна} end else begin Умовний оператор if <умова> then begin {що робити, якщо умова правильна} end else begin {що робити, якщо умова неправильна} end; Особливості: • перед else НЕ ставиться крапка з комою • друга частина (else …) може бути відсутня (неповна форма) • якщо в блоці один оператор, можна забрати слова begin і end

Що неправильно? if a > b then begin a : = b; end else Що неправильно? if a > b then begin a : = b; end else begin b : = a; end; if a > b then begin a : = b; end begin else b > a begin b : = a; end; if a > b then begin a : = b; end else begin b : = a; end;

Варіант 2. Блок-схема початок ввести a, b max: = a; так b > a? Варіант 2. Блок-схема початок ввести a, b max: = a; так b > a? max: = b; вивести max кінець ні неповна форма розгалуження

Варіант 2. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих Варіант 2. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); max : = a; неповна форма умовного if b > a then оператора max : = b; writeln (‘Більше число ', max); end.

Варіант 2 Б. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два Варіант 2 Б. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); max : = b; > if a ? ? ? b then ? ? ? max : = a; writeln (‘Більше число ', max); end.

Що неправильно? if a > b then begin a : = b; b else Що неправильно? if a > b then begin a : = b; b else b : = a; if a > b then b a : = b; else b : = a; end; if a > b then begin a : = b; end else b : = a; if a > b then else beginthen if b >= a bb: = a; end;

Завдання Завдання "4": Ввести три числа і знайти найбільше з них. Приклад: Ввести три числа: 4 15 9 Найбільше число 15 "5": Ввести п’ять чисел і знайти найбільше з них. Приклад: Ввести п’ять чисел: 4 15 9 56 Найбільше число 56 4

Програмування на мові Паскаль Тема 3. Складені умови Програмування на мові Паскаль Тема 3. Складені умови

Складені умови Задача. Фірма набирає співробітників від 25 до 40 років включно. Ввести вік Складені умови Задача. Фірма набирає співробітників від 25 до 40 років включно. Ввести вік людини і визначити, чи підходить вона фірмі (вивести відповідь “підходить” або “не підходить”). Особливості: потрібно перевірити, виконання двох умов одночасно. ? Чи можна розв’язати відомими методами?

Варіант 1. Алгоритм початок ввести x так ‘підходить' x <= 40? x >= 25? Варіант 1. Алгоритм початок ввести x так ‘підходить' x <= 40? x >= 25? ні ні ‘не підходить' кінець ‘не підходить'

Варіант 1. Програма program qq; var x: integer; begin writeln(‘Ввести вік'); read ( x Варіант 1. Програма program qq; var x: integer; begin writeln(‘Ввести вік'); read ( x ); if x >= 25 then if x <= 40 then writeln (‘Підходить') else writeln (‘Не підходить'); end.

Варіант 2. Алгоритм початок ввести x так x >= 25 і x <= 40? Варіант 2. Алгоритм початок ввести x так x >= 25 і x <= 40? ‘підходить' ні ‘не підходить' кінець

Варіант 2. Програма program qq; var x: integer; begin складена writeln(‘Ввести вік'); умова read Варіант 2. Програма program qq; var x: integer; begin складена writeln(‘Ввести вік'); умова read ( x ); if (x >= 25) and (x <= 40) then writeln (‘Підходить') else writeln (‘Не підходить') end.

Складена умова – це умова, яка складається з декількох простих умов (відношень), зв’язаних з Складена умова – це умова, яка складається з декількох простих умов (відношень), зв’язаних з допомогою логічних операцій: • not – НІ (заперечення, інверсія) • and – І (логічне множення, кон'юнкція, одночасне виконання умов) • or – АБО (логічне додавання, диз'юнкція, виконання хоча б одної з умов) • xor – виключаюче АБО (виконання тільки одної з двох умов, але не обох) Прості умови (відношення) < <= > дорівнює >= = не дорівнює <>

Складена умова Порядок виконання • вирази в дужках • not • and • or, Складена умова Порядок виконання • вирази в дужках • not • and • or, xor • <, <=, >, >=, =, <> Особливості – кожна з простих умов обов'язково береться в дужки. Приклад 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin. . . end

Складена умова Істинне чи хибне при a : = 2; b : = 3; Складена умова Істинне чи хибне при a : = 2; b : = 3; c : = 4; True not (a > b) True (a < b) and (b < c) True not (a >= b) or (c = d) True (a < c) or (b < c) and (b < a) (a < b) xor not (b > c) FALSE Для яких значень x істинні умови: (x (x < < > > 6) 6) and (x < 10) and (x > 10) or (x < 10) or (x > 10) (- , 6) (6, 10) (10, ) (- , 10) (- , 6) (10, ) (- , ) (6, ) x<6 x > 10 x < 10 x>6

Завдання Завдання "4": Ввести номер місяця і вивести назву пори року. Приклад: Ввести номер місяця: 4 весна "5": Ввести вік людини (від 1 до 150 років) и вивести його разом з наступним слово “рік”, “роки" або “років". Приклад: Ввести вік: 24 Вам 24 роки Ввести вік: 57 Вам 57 років

Програмування на мові Паскаль Тема 4. Цикли Програмування на мові Паскаль Тема 4. Цикли

Цикли Цикл – це багатократне виконання однакової послідовності дій. • цикл з відомою кількістю Цикли Цикл – це багатократне виконання однакової послідовності дій. • цикл з відомою кількістю кроків • цикл з невідомою кількістю кроків (цикл з умовою) Задача. Вивести на екран квадрати і куби цілих чисел від 1 до 8 (від a до b). Особливості: однакові дії виконуються 8 раз. ? Чи можна розв’язати відомими методами?

Алгоритм початок задати початкове значення змінної циклу i : = 1; перевірити, чи все Алгоритм початок задати початкове значення змінної циклу i : = 1; перевірити, чи все виконали i <= 8? так i 2 : = i * i; i 3 : = i 2 * i; i, i 2, i 3 i : = i + 1; ні кінець обчислити квадрат і куб вивести результат перейти до наступного i

Алгоритм (з блоком Алгоритм (з блоком "цикл") блок "цикл" початок i : = 1, 8 кінець i 2 : = i * i; i 3 : = i 2 * i; тіло циклу i, i 2, i 3

Програма program qq; var i, i 2, i 3: integer; початкове значення begin змінна Програма program qq; var i, i 2, i 3: integer; початкове значення begin змінна циклу кінцеве значення for i: =1 to 8 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end.

Цикл з зменшенням змінної Задача. Вивести на екран квадрати і куби цілих чисел від Цикл з зменшенням змінної Задача. Вивести на екран квадрати і куби цілих чисел від 8 до 1 (в зворотному порядку). Особливості: змінна циклу повинна зменшуватися. Розв’язання: . . . for i: =8 downto 1 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; . . .

Цикл з змінною Збільшення змінної на 1: for <змінна> : = <початкове значення> to Цикл з змінною Збільшення змінної на 1: for <змінна> : = <початкове значення> to <кінцеве значення> do begin {тіло циклу} end; Зменшення змінної на 1: for <змінна> : = <початкове значення> downto <кінцеве значення> do begin {тіло циклу} end;

Цикл з змінною Особливості: • змінна повинна бути тільки цілою (integer) • крок зміни Цикл з змінною Особливості: • змінна повинна бути тільки цілою (integer) • крок зміни змінної циклу завжди рівний 1 (to) або -1 (downto) • якщо в тілі циклу тільки один оператор, слова begin і end можна не писати: for i: =1 to 8 do writeln(‘Привіт'); • якщо кінцеве значення менше початкового, цикл (to) не виконується ні разу (перевірка умови в початку циклу, цикл з передумовою)

Цикл з змінною Особливості: • в тілі циклу не дозволяється змінювати змінну циклу (чому? Цикл з змінною Особливості: • в тілі циклу не дозволяється змінювати змінну циклу (чому? ) • при зміні початкового і кінцевого значення всередині циклу кількість кроків не змінюється: n : = 8; for i: =1 to n do begin writeln('Привіт'); n : = n + 1; end; немає зациклювання

Цикл з змінною Особливості: • після виконання циклу в багатьох системах встановлюється перше значення Цикл з змінною Особливості: • після виконання циклу в багатьох системах встановлюється перше значення змінної циклу, при якому порушується умова: for i: =1 to 8 do НО writeln('Привіт'); ВА ТО writeln('i=', i); ЕН М i=9 У ОК Д НЕ for i: =8 downto 1 do writeln('Привіт'); writeln('i=', i); i=0

Скільки разів виконається цикл? a : = 1; for i: =1 to 3 do Скільки разів виконається цикл? a : = 1; for i: =1 to 3 do a : = a+1; a= 4 a : = 1; for i: =3 to 1 do a : = a+1; a= 1 a : = 1; for i: =1 downto 3 do a : = a+1; a= 1 a : = 1; for i: =3 downto 1 do a : = a+1; a= 4

Як змінюється крок? Задача. Вивести на екран квадрати і куби непарних цілих чисел від Як змінюється крок? Задача. Вивести на екран квадрати і куби непарних цілих чисел від 1 до 9. Особливості: змінна циклу повинна збільшуватися на 2. Проблема: в Паскалі крок може бути 1 або -1. Розв’язання: . . . for i: =1 to 9 do begin if i mod 2 = 1 then begin ? ? ? i 2 : = i*i; виконується тільки для i 3 : = i 2*i; непарних i writeln(i: 4, i 2: 4, i 3: 4); end; Що погано? . . . ?

Як змінюється крок? – II Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється Як змінюється крок? – II Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється від 1 до 5. Початкове значення i дорівнює 1, з кожним кроком циклу i збільшується на 2. Розв’язання: . . . i? ? ? 1; : = for k: =1 to 5 do begin i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); i? ? ? i + 2; : = end; . . .

Як змінюється крок? – III Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється Як змінюється крок? – III Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється від 1 до 5. Знаючи k, потрібно розрахувати i. k 1 2 3 4 5 i 1 3 5 7 9 Розв’язання: . . . for k: =1 to 5 do begin i ? ? ? 2*k – 1; : = i 2 : = i*i; i 3 : = i 2*i; writeln(i: 4, i 2: 4, i 3: 4); end; . . . i = 2 k-1

Завдання Завдання "4": Ввести a і b і вивести квадрати і куби чисел від a до b. Приклад: Введіть границі інтервалу: 4 6 4 16 64 5 25 125 6 36 216 "5": Вивести квадрати і куби 10 чисел наступної послідовності: 1, 2, 4, 7, 11, 16, … Приклад: 1 1 1 2 4 8 4 16 64. . . 46 2116 97336

Програмування на мові Паскаль Тема 5. Цикли з умовою Програмування на мові Паскаль Тема 5. Цикли з умовою

Цикл з невідомою кількістю кроків Приклад: Відрізати поліно від колоди. Скільки разів потрібно зробити Цикл з невідомою кількістю кроків Приклад: Відрізати поліно від колоди. Скільки разів потрібно зробити рух пилкою? Задача: Ввести ціле число (<2000000) і визначити кількість цифр у ньому. Ідея розв’язання: Відрізаємо послідовно останню цифру, збільшуємо лічильник. n count 123 0 12 1 1 2 0 3 Проблема: Невідомо, скільки кроків потрібно зробити. Розв’язання: Потрібно зупинитися, коли n = 0, тобто потрібно робити “поки n <> 0".

Алгоритм початок ввести n обнулити лічильник цифр count : = 0; виконувати Алгоритм початок ввести n обнулити лічильник цифр count : = 0; виконувати "поки n <> 0" n <> 0? ні так count : = count + 1; n : = n div 10; count кінець

Програма program qq; , n 1: integer; var n, count: integer; begin writeln(‘Ввести ціле Програма program qq; , n 1: integer; var n, count: integer; begin writeln(‘Ввести ціле число'); read(n); n 1 : = n; виконувати "поки n <> 0" count : = 0; while n <> 0 do begin count : = count + 1; n : = n div 10; end; writeln('В числі ', n 1, ' знайшли ', n, count, ' цифр'); Що погано? end. ?

Цикл с умовою while <умова> do begin {тіло циклу} end; Особливості: • можна використовувати Цикл с умовою while <умова> do begin {тіло циклу} end; Особливості: • можна використовувати складені умови: while (a

Цикл з умовою Особливості: • умова перевіряється кожен раз при вході в цикл • Цикл з умовою Особливості: • умова перевіряється кожен раз при вході в цикл • якщо умова на вході в цикл хибна, цикл не виконується жодного разу a : = 4; b : = 6; while a > b do a : = a – b; • якщо умова ніколи не стане хибною, програма зациклиться a : = 4; b : = 6; while a < b do d : = a + b;

Скільки разів виконується цикл? a : = 4; b : = 6; while a Скільки разів виконується цикл? a : = 4; b : = 6; while a < b do a : = a + 1; 2 рази a=6 a : = 4; b : = 6; while a < b do a : = a + b; 1 раз a = 10 a : = 4; b : = 6; while a > b do a : = a + 1; 0 разів a=4 a : = 4; b : = 6; while a < b do b : = a - b; 1 раз b = -2 a : = 4; b : = 6; while a < b do a : = a - 1; зациклювання

Заміна for на while і навпаки for i: =1 to 10 do begin {тіло Заміна for на while і навпаки for i: =1 to 10 do begin {тіло циклу} end; for i: =a downto b do begin {тіло циклу} end; i : = 1; while i <= 10 do begin {тіло циклу} i : = i + 1; end; i : = a; while i >= b do begin {тіло циклу} i : = i - 1; end; Заміна циклу for на while можлива завжди. Заміна while на for можлива тільки тоді, коли можна наперед розрахувати кількість кроків циклу.

Завдання Завдання "4": Ввести ціле число і знайти суму його цифр. Приклад: Ввести ціле число: 1234 Сума цифр числа 1234 рівна 10. "5": Ввести ціле число і визначити, чи правда, що в його записі є дві однакові цифри. Приклад: Ввести ціле число: 1234 1224 Ні. Так.

Послідовності Приклади: • 1, 2, 3, 4, 5, … an = n a 1 Послідовності Приклади: • 1, 2, 3, 4, 5, … an = n a 1 = 1, an+1 = an + n • 1, 2, 4, 7, 11, 16, … • 1, 2, 4, 8, 16, 32, … a 1 = 1, an+1 = an+1 an = 2 n-1 a 1 = 1, an+1 = 2 an • b 1 = 1, bn+1 = bn+1 c 1 = 2, cn+1 = 2 cn

Послідовності Задача: знайти суму всіх елементів послідовності, які по модулю більші 0, 001: Елемент Послідовності Задача: знайти суму всіх елементів послідовності, які по модулю більші 0, 001: Елемент послідовності (починаючи з № 2): n 1 2 3 4 5 . . . b 1 2 3 4 5 . . . c 2 4 8 16 32 . . . z -1 1 -1 . . . b : = b+1; c : = 2*c; z : = -z;

Алгоритм початок початкове значення S : = 0; b : = 1; c : Алгоритм початок початкове значення S : = 0; b : = 1; c : = 2; z : = -1; a : = 1; |a| > 0. 001? перший елемент ні так новий елемент зміни S S : = S + a; кінець a : = z*b/c; b : = b + 1; c : = 2*c; z : = -z; ? Перестановка?

Програма program qq; початкове значення var b, c, z: integer; S, a: real; begin Програма program qq; початкове значення var b, c, z: integer; S, a: real; begin S : = 0; z : = -1; b : = 1; c : = 2; a : = 1; while abs(a) > 0. 001 do begin збільшення S : = S + a; суми a : = z * b / c; z : = - z; розрахунок елемента b : = b + 1; послідовності c : = c * 2; end; перехід до наступного writeln('S =', S: 10: 3); доданка end.

Завдання Завдання "4": Знайти суму елементів послідовності з точністю 0, 001: Відповідь: S = 1. 157 "5": Знайти суму елементів послідовності з точністю 0, 001: Відповідь: S = 1. 220

Цикл з післяумовою Задача: Ввести ціле додатне число (<2000000) і визначити кількість цифр в Цикл з післяумовою Задача: Ввести ціле додатне число (<2000000) і визначити кількість цифр в ньому. Проблема: Як не дати ввести від'ємне число або нуль? Розв’язання: Якщо вводиться неправильне число, повернутися назад до введення даних (цикл!). Особливості: Один раз тіло циклу потрібно виконати в будь-якому випадку => перевірку умови циклу потрібно виконувати в кінці циклу (цикл с післяумовою). Цикл с післяумовою – це цикл, в якому перевірка умови виконується в кінці циклу.

Цикл з післяумовою: алгоритм початок ввести n тіло циклу ні n > 0? умова Цикл з післяумовою: алгоритм початок ввести n тіло циклу ні n > 0? умова ВИХОДУ так основний алгоритм кінець блок "типовий процес"

Програма program qq; var n: integer; begin repeat writeln(‘Ввести додатне число'); read(n); умова ВИХОДУ Програма program qq; var n: integer; begin repeat writeln(‘Ввести додатне число'); read(n); умова ВИХОДУ until n > 0; . . . { основний алгоритм } end. Особливості: • тіло циклу завжди виконується хоча б один раз • після слова until ("до тих пір, поки не…") ставиться умова ВИХОДУ із циклу

Скільки разів виконується цикл? a : = 4; b : = 6; repeat a Скільки разів виконується цикл? a : = 4; b : = 6; repeat a : = a + 1; until a > b; 3 рази a=7 a : = 4; b : = 6; repeat a : = a + b; until a > b; 1 раз a = 10 a : = 4; b : = 6; repeat a : = a + b; until a < b; зациклення a : = 4; b : = 6; repeat b : = a - b; until a < b; 2 рази b=6 a : = 4; b : = 6; repeat a : = a + 2; until a < b; зациклення

Завдання (з захистом від неправильного введення) Завдання (з захистом від неправильного введення) "4": Ввести натуральне число і визначити, чи правда що сума його цифр дорівнює 10. Приклад: Ввести число >= 0: Введіть число >= 0: -234 1233 Потрібно додатне число. Ні Ввести число >= 0: 1234 Так "5": Ввести натуральне число і визначити, які цифри зустрічаються декілька разів. Приклад: Введіть число >= 0: 2323 1234 Повторяються: 2, 3 Немає повторів.

Програмування на мові Паскаль Тема 6. Оператор вибору Програмування на мові Паскаль Тема 6. Оператор вибору

Оператор вибору Задача: Ввести номер місяця і вивести кількість днів в цьому місяці. Розв’язання: Оператор вибору Задача: Ввести номер місяця і вивести кількість днів в цьому місяці. Розв’язання: Кількість днів у місяцях: 28 днів – 2 (лютий) 30 днів – 4 (квітень), 6 (червень), 9 (вересень), 11 (листопад) 31 день – 1 (січень), 3 (березень), 5 (травень), 7 (липень), 8 (серпень), 10 (жовтень), 12 (грудень) Особливості: Вибір не з двох, а з декількох варіантів в залежності від номера місяця. ? Чи можна розв’язати відомими методами?

Алгоритм початок ввести M M = 1? ні M = 2? так оператор вибору Алгоритм початок ввести M M = 1? ні M = 2? так оператор вибору D : = 31; D : = 28; ні M = 12? ні жоден з варіантів не підійшов помилка кінець так D : = 31; вивести D

Програма program qq; var M, D: integer; begin writeln(‘Ввести номер місяця: '); read ( Програма program qq; var M, D: integer; begin writeln(‘Ввести номер місяця: '); read ( M ); case M of 2: begin D : = 28; end; 4, 6, 9, 11: begin D : = 30; end; 1, 3, 5, 7, 8, 10, 12: D : = 31; else D : = -1; end; жоден варіант не підійшов if D > 0 then writeln(‘В цьому місяці ', D, ' днів. ') else writeln(‘Неправильний номер місяця'); end.

Оператор вибору Особливості: • після case може бути ім’я змінної або арифметичний вираз цілого Оператор вибору Особливості: • після case може бути ім’я змінної або арифметичний вираз цілого типу (integer) case i+3 of 1: begin a : = b; end; 2: begin a : = c; end; або символьного типу (char) var c: char; . . . case c of 'а': writeln('Антилопа'); 'б': writeln('Борсук'); else writeln('Не знаю'); end;

Оператор вибору Особливості: • якщо потрібно виконати тільки один оператор, слова begin і end Оператор вибору Особливості: • якщо потрібно виконати тільки один оператор, слова begin і end можна не писати case i+3 of 1: a : = b; 2: a : = c; end; • не можна ставити два однакових значення case i+3 of 1: a : = b; 1: a : = c; end;

Оператор вибору Особливості: • значення, при яких виконуються однакові дії, можна групувати перечислення діапазон Оператор вибору Особливості: • значення, при яких виконуються однакові дії, можна групувати перечислення діапазон суміш case i of 1: a : = b; 2, 4, 6: a : = c; 10. . 15: a : = d; 20, 21, 25. . 30: a : = e; else writeln(‘Помилка'); end;

Що неправильно? case a of 2: begin a : = b; 4: a : Що неправильно? case a of 2: begin a : = b; 4: a : = c; end; case a of 2: a : = b ; 4: a : = c end; case a of 2. . 5: a : = b; 4: a : = c; end; case a of 0. . 2: a : = b; 6. . 3: a : = c; 3. . 6: end; case a+c/2 of 2: a : = b; 4: a : = c; end; begin case a of 2: a : = b; d : = 0; end; 4: a : = c; end;

Завдання (з захистом від неправильного введення) Завдання (з захистом від неправильного введення) "4": Ввести номер місяця і вивести кількість днів в ньому, а також кількість помилок при введенні. Приклад: Введіть номер місяця: -2 Введіть номер місяця: 11 В цьому місяці 30 днів. Ви вводили неправильно 1 Введіть номер місяця: 2 В цьому місяці 28 днів. Ви вводили неправильно 0 раз. "5": Ввести номер місяця і номер дня, вивести кількість днів, які залишилися до Нового року. Приклад: Ввести номер місяця: 12 Ввести день: 25 До Нового року залишилося 6 днів.

Програмування на мові Паскаль Тема 7. Графіка Програмування на мові Паскаль Тема 7. Графіка

Система координат X (0, 0) y x Y (x, y) Система координат X (0, 0) y x Y (x, y)

Керування кольором Колір і товщина ліній, колір точок: Pen ( 1, 255, 0, 0 Керування кольором Колір і товщина ліній, колір точок: Pen ( 1, 255, 0, 0 ); товщина лінії G(green) B(blue) 0. . 255 R(red) 0. . 255 Колір і стиль заливки: Brush ( 1, 0, 255, 0 ); 0 – виключити 1 – включити R G B Колір тексту: Text. Color ( 0, 0, 255 ); R G B

Точки, відрізки і ламані (x, y) Pen (1, 0, 0, 255); Point (x, y); Точки, відрізки і ламані (x, y) Pen (1, 0, 0, 255); Point (x, y); (x 1, y 1) (x 2, y 2) (x 1, y 1) (x 5, y 5) (x 2, y 2) (x 3, y 3) (x 4, y 4) Pen (1, 0, 255, 0); Line (x 1, y 1, x 2, y 2); Pen (1, Move. To Line. To 255, (x 1, (x 2, (x 3, (x 4, (x 5, 0, 0); y 1); y 2); y 3); y 4); y 5);

Фігури з заливкою (x 1, y 1) (x 2, y 2) Pen (1, 0, Фігури з заливкою (x 1, y 1) (x 2, y 2) Pen (1, 0, 0, 255); Brush (1, 255, 0); Rectangle (x 1, y 1, x 2, y 2); (x 1, y 1) Pen (1, 255, 0, 0); Brush (1, 0, 255, 0); Ellipse (x 1, y 1, x 2, y 2); (x 2, y 2) (x, y) ? Як відмінити заливку? Brush (1, 100, 255); Fill (x, y);

Текст т! і ив 30 р (x, y) П о Text. Color (0, 0, Текст т! і ив 30 р (x, y) П о Text. Color (0, 0, 255); Brush (1, 255, 0); Font (20, 30, 600); розмір 10 пікселів кут повороту насиченість: 400 – нормальний 600 – жирний Move. To (x, y); writeln ('Привіт!');

Приклад program qq; begin Pen(2, 255, 0, 255); (200, 50) Brush(1, 0, 0, 255); Приклад program qq; begin Pen(2, 255, 0, 255); (200, 50) Brush(1, 0, 0, 255); (100, 100) Rectangle(100, 300, 200); Move. To(100, 100); Line. To(200, 50); Line. To(300, 100); Brush(1, 255, 0); Fill(200, 75); (300, 200) Pen(2, 255, 255); Brush(1, 0, 255, 0); Ellipse(150, 100, 250, 200); end.

Завдання Завдання "4": "Жабка" "5": "Корона"

Штриховка N ліній (N=5) (x 1, y 1) h (x 2, y 2) Rectangle Штриховка N ліній (N=5) (x 1, y 1) h (x 2, y 2) Rectangle (x 1, Line( x 1+h, Line( x 1+2*h, Line( x 1+3*h, . . . x y 1, x 2, y 2); x 1+h, y 2); x 1+2*h, y 2); x 1+3*h, y 2); x h : = (x 2 – x 1) / (N + 1); var x, h: real; Rectangle (x 1, y 1, x 2, y 2); x : = x 1 + h; заокруглення до for i: =1 to N do begin найближчого цілого Line( round(x), y 1, round(x), y 2); x : = x + h; end;

Як міняти колір? (x 1, y 1) x сірий: R = G = B Як міняти колір? (x 1, y 1) x сірий: R = G = B (x-1, y 1+1) (x 2, y 2) Brush ( 1, c, c, c ); Fill ( ? ? ? , ? ? ? ); Крок зміни c: hc : = 255 div (N + 1); c : = 0; for i: =1 to N+1 do begin Line (round(x), y 1, round(x), y 2); Brush (1, c, c, c); Fill (round(x)-1, y 1+1); x : = x + h; c : = c + hc; end; var c, hc: integer;

Штриховка a (x 1, y 1) (x 2, y 2) h (x 3+a, y Штриховка a (x 1, y 1) (x 2, y 2) h (x 3+a, y 1) (x 3, y 2) Line( x 1+h, y 1, x 1+h-a, y 2); Line( x 1+2*h, y 1, x 1+2*h-a, y 2); Line( x 1+3*h, y 1, x 1+3*h-a, y 2); . . . x x-a h : = (x 3 – x 2) / (N + 1); a : = x 2 – x 1; x : = x 1 + h; for i: =1 to N do begin Line( round(x), y 1, round(x-a), y 2); x : = x + h; end;

Штриховка (x 1, y 1) hx hy (x 2, y 2) Line( x 1, Штриховка (x 1, y 1) hx hy (x 2, y 2) Line( x 1, y 1+hy, x 1+hx, y 1+hy) ; Line( x 1, y 1+2*hy, x 1+2*hx, y 1+2*hy); Line( x 1, y 1+3*hy, x 1+3*hx, y 1+3*hy); . . . y x y hx : = (x 2 – x 1) / (N + 1); hy : = (y 2 – y 1) / (N + 1); x : = x 1 + hx; y : = y 1 + hy; for i: =1 to N do begin Line( x 1, round(y), round(x), round(y)); x : = x + hx; y : = y + hy; end;

Завдання Завдання "4": Ввести з клавіатури кількість ліній штриховки і побудувати фігуру, заливши всі області різним кольором. "5": Ввести з клавіатури кількість кіл і побудувати фігуру, заливши всі області різними кольорами.

Програмування на мові Паскаль Тема 8. Графіки функцій Програмування на мові Паскаль Тема 8. Графіки функцій

Побудова графіків функцій Задача: побудувати графік функції y = 3 sin(x) на інтервалі від Побудова графіків функцій Задача: побудувати графік функції y = 3 sin(x) на інтервалі від 0 до 2π. Аналіз: максимальне значення ymax = 3 при x = π/2 мінімальне значення ymin = -3 при x = 3π/2 Проблема: функція задана в математичній системі координат, будувати потрібно на екрані, вказуючи координати в пікселях.

Перетворення координат Математична система координат Екранна система координат (пікселі) Y (0, 0) x (0, Перетворення координат Математична система координат Екранна система координат (пікселі) Y (0, 0) x (0, 0) (x, y) y b X k – масштаб (довжина зображення одиничного відрізка на екрані) a xе yе (xе, yе) xе = a + kx yе = b - ky

Програма на екрані цикл побудови графіка program qq; 2π const a = 50; b Програма на екрані цикл побудови графіка program qq; 2π const a = 50; b = 200; k = 50; xmin = 0; xmax = 6. 2832; var x, y, h: real; h – крок зміни x xe, ye, w: integer; w – довжина осі ОХ в пікселях begin w : = round((xmax - xmin)*k); Line(a-10, b, a+w, b); осі координат Line(a, 0, a, 2*b); x : = xmin; h : = 0. 05; while x <= xmax do begin y : = 3*sin(x); xe : = a + round(k*x); ye : = b - round(k*y); Point (xe, ye); x : = x + h; end. Що погано? ?

Як з’єднати точки? Алгоритм: Програма: Якщо перша точка перейти в точку (xе, yе) інакше Як з’єднати точки? Алгоритм: Програма: Якщо перша точка перейти в точку (xе, yе) інакше відрізок в точку (xе, yе) вибір варіанта дії логічна змінна var first: boolean; . . . початкове значення begin. . . first : = True; while x <= xmax do begin. . . if first then begin Move. To(xe, ye); first : = False; end else Line. To(xe, ye); . . . end; end.

Завдання Завдання "4": Побудувати графік функції y = x 2 на інтервалі [-3, 3]. "5": Побудувати графік функції (еліпс)

Програмування на мові Паскаль Тема 9. Процедури Програмування на мові Паскаль Тема 9. Процедури

Процедури Задача: Побудувати фігуру: ? Чи можна розв’язати відомими методами? Особливості: Три схожі фігури. Процедури Задача: Побудувати фігуру: ? Чи можна розв’язати відомими методами? Особливості: Три схожі фігури. подібності: розміри, кут повороту відмінності: координати, колір ? Скільки координат потрібно задати?

Процедури Процедура – це допоміжний алгоритм, який призначений для виконання деяких дій. Примітка: • Процедури Процедура – це допоміжний алгоритм, який призначений для виконання деяких дій. Примітка: • виконання однакових дій в різних місцях програми • розбивка програми (або іншої процедури) на підзадачі для кращого сприймання Задача Підзадача 1 1. 2 1. 3 Підзадача 2 2. 1 2. 2 Підзадача 3 2. 3 3. 1 3. 2 3. 3

Процедури Порядок розробки: • виділити однакові або схожі дії (три фігури) • знайти в Процедури Порядок розробки: • виділити однакові або схожі дії (три фігури) • знайти в них спільне (розміри, форма, кут повороту) і відмінності (координати, колір) • відмінності записати у вигляді невідомих змінних, вони будуть параметрами процедури заголовок (x, y-60) 60 (x, y) (x+100, y) 100 тіло процедури параметри procedure Tr( x, y, r, g, b: integer); begin Move. To(x, y); колір Line. To(x, y-60); Line. To(x+100, y); координати Line. To(x, y); Brush(1, r, g, b); Fill(x+20, y-20); end;

Програма формальні параметри 60 (100, 100) 100 виклик процедури program qq; procedure Tr( x, Програма формальні параметри 60 (100, 100) 100 виклик процедури program qq; procedure Tr( x, y, r, g, b: integer); begin. . . end; begin Pen(1, 255, 0, 255); Tr(100, 0, 0, 255); процедура Tr(200, 100, 0, 255, 0); Tr(200, 160, 255, 0, 0); end. фактичні параметри

Процедури Особливості: • всі процедури розміщені вище основної програми • в заголовку процедури перераховуються Процедури Особливості: • всі процедури розміщені вище основної програми • в заголовку процедури перераховуються формальні параметри, вони позначаються іменами, оскільки можуть змінюватися procedure Tr( x, y, r, g, b: integer); • при виклику процедури в дужках вказуються фактичні параметри (числа або арифметичні вирази) в тому ж порядку Tr (200, 100, 0, 255, 0); x y r g b

Процедури Особливості: • для кожного формального параметра після двокрапки вказується його тип procedure A Процедури Особливості: • для кожного формального параметра після двокрапки вказується його тип procedure A (x: real; y: integer; z: real); • якщо однотипні параметри стоять поряд, їх перераховують через кому procedure A (x, z: real; y, k, l: integer); • всередині процедури параметри використовуються так само, як і змінні

Процедури Особливості: • в процедурі можна оголошувати додаткові локальні змінні, інші процедури не мають Процедури Особливості: • в процедурі можна оголошувати додаткові локальні змінні, інші процедури не мають до них доступу program qq; procedure A(x, y: integer); var a, b: real; begin a : = (x + y)/6; . . . end; begin. . . end. локальні змінні

Параметри-змінні Задача: скласти процедуру, яка міняє місцями значення двох змінних. Особливості: потрібно, щоб зміни Параметри-змінні Задача: скласти процедуру, яка міняє місцями значення двох змінних. Особливості: потрібно, щоб зміни зроблені в процедурі, стали відомі програмі яка викликає program qq; var x, y: integer; procedure Exchange ( a, b: integer ); var c: integer; begin c : = a; a : = b; b : = c; end; begin x : = 1; y : = 2; Exchange ( x, y ); writeln ( ’x = ’, x, ’ y = ’, y ); end; ця процедура працює з копіями параметрів x = 1 y = 2

Параметри-змінні параметри можуть змінюватися procedure Exchange ( var c: integer; begin c : = Параметри-змінні параметри можуть змінюватися procedure Exchange ( var c: integer; begin c : = a; a : = b; b : = c; end; a, b: integer ); Примітка: таким чином процедура (і функція) можуть повертати декілька значень, Заборонені варіанти виклику Exchange ( 2, 3 ); { числа } Exchange ( x+z, y+2 ); { вирази }

Задания Задания "4": Використовуючи процедуру, побудувати фігуру. "5": Використовуючи процедуру, побудувати фігуру.

Програмування на мові Паскаль Тема 10. Рекурсія Програмування на мові Паскаль Тема 10. Рекурсія

Рекурсивні об’єкти Казка про попа і собаку: Приклади: У попа була собака, він її Рекурсивні об’єкти Казка про попа і собаку: Приклади: У попа була собака, він її любив. Вона з’їла кусок м’яса, він її убив. В ямку закопав, надпис написав: Казка про попа і собаку Малюнок з рекурсією: Факторіал: якщо Рекурсивний об’єкт – це об’єкт, визначений через один або декілька таких же об’єктів.

Дерево Піфагора з N рівнів – це стовбур і відходячі від нього симетрично два Дерево Піфагора з N рівнів – це стовбур і відходячі від нього симетрично два дерева Піфагора з N-1 рівнем, такі що довжина їх стовбурів в 2 рази менша і кут між ними рівний 90 o. 6 рівнів: ? Як довести, що це рекурсивна фігура?

Дерево Піфагора Особливості: коли кількість рівнів, що залишилися стане рівним • коли зупинитися? нулю! Дерево Піфагора Особливості: коли кількість рівнів, що залишилися стане рівним • коли зупинитися? нулю! • дерева мають різний нахил x 1 = x 0 + L·cos(α) α+45 o α-45 o (x 1, y 1) нахил "дочірніх" дерев L α (x 0, y 0) y 1 = y 0 – L·sin(α) α + π/4 α – π/4

Процедура кут α довжина стовбура procedure Pifagor(x 0, y 0, a, L: real; N: Процедура кут α довжина стовбура procedure Pifagor(x 0, y 0, a, L: real; N: integer); const k = 0. 6; { зміна довжини } var x 1, y 1: real; { локальні змінні } begin завершити, якщо N=0 if N > 0 then begin x 1 : = x 0 + L*cos(a); y 1 : = y 0 - L*sin(a); рекурсивні Line (round(x 0), round(y 0), виклики round(x 1), round(y 1)); Pifagor (x 1, y 1, a+pi/4, L*k, N-1); Pifagor (x 1, y 1, a-pi/4, L*k, N-1); end; Рекурсивною називається процедура, викликаюча сама себе.

Програма program qq; procedure Pifagor(x 0, y 0, a, L: real; N: integer); . Програма program qq; procedure Pifagor(x 0, y 0, a, L: real; N: integer); . . . довжина стовбура кут α end; begin Pifagor (250, 400, pi/2, 150, 8); end; x 0 ? y 0 кількість рівнів Як нахилити дерево вправо на 30 o? Pifagor (250, 400, 2*pi/3, 150, 8);

Задания Задания "4": Використовуючи рекурсивну процедуру, побудувати фігуру: "5": Використовуючи рекурсивну процедуру, побудувати фігуру :

Програмування на мові Паскаль Тема 11. Анімація Програмування на мові Паскаль Тема 11. Анімація

Анімація (англ. animation) – оживлення зображення на екрані. Задача: всередині синього квадрата 400 на Анімація (англ. animation) – оживлення зображення на екрані. Задача: всередині синього квадрата 400 на 400 пікселів зліва направо рухається жовтий квадрат 20 на 20 пікселів. Програма зупиняється, якщо натиснута клавіша Esc або квадрат дійшов до границі синьої області. Проблема: як зобразити переміщення об’єкта на екрані? Прив’язка: розміщення об’єкта задається координатами (x, y) Принцип анімації: 1. малюємо об’єкт в точці (x, y) 2. затримка на декілька мілісекунд 3. затираємо об’єкт 4. змінюємо координати (x, y) 5. переходимо до кроку 1

Як Як "зловити" натискуванням клавіші? Подія – це зміна в стані якого-небудь об’єкта або дія користувача (натиснення на клавішу, клік мишкою). Is. Event – логічна функція, яка визначає, чи були які-небудь дії користувача. Event – процедура, яка визначає, які саме дії відбулися. if Is. Event then begin var k, x, y: integer; Event(k, x, y); if k = 1 then writeln('Клавіша з кодом ', x) else { k = 2 } writeln('Мишка: x=', x, ' y=', y); end;

Як вийти з циклу при натисканні Esc? True, якщо потрібно зупинитися program qq; var Як вийти з циклу при натисканні Esc? True, якщо потрібно зупинитися program qq; var stop: boolean; запуск циклу k, code, i: integer; begin stop : = False; якщо що-небудь відбулося. . . repeat if Is. Event then begin що відбулося? Event(k, code, i); if (k = 1) and (code = 27) then stop : = True; end; якщо натиснута клавіша. . . з кодом 27 (Esc), то стоп until stop; end;

Процедура (малювання і стирання) Ідея • одна процедура малює і стирає • стерти = Процедура (малювання і стирання) Ідея • одна процедура малює і стирає • стерти = намалювати кольором фону • границю квадрата відключити (в основній програмі) (x, y) (x+20, y+20) малювати (True) або ні (False)? procedure Draw(x, y: integer; flag: boolean); begin малюємо: колір пензлика – жовтий if flag then Brush(1, 255, 0) стираємо: колір пензлика – синій else Brush(1, 0, 0, 255); Rectangle(x, y, x+20, y+20); end; тільки заливка!

Повна програма program qq; var x, y, k, code, i: integer; stop: boolean; процедура Повна програма program qq; var x, y, k, code, i: integer; stop: boolean; процедура procedure Draw(x, y: integer; flag: Boolean); begin. . . end; begin синій фон Brush(1, 0, 0, 255); Rectangle(10, 400, 400); відключити границю Pen(0, 0, 0, 255); початкова x : = 10; y : = 200; stop : = false; умова repeat if Is. Event then begin вихід по. . . клавіші Esc end; Draw(x, y, True); чекаємо 10 мс Delay(10); Draw(x, y, False); вихід при x : = x + 1; досягненні границі if x >= 400 -20 then stop : = true; until stop; end.

Завдання Завдання "4": Два квадрати рухаються в протилежних напрямках: "5": Два квадрати рухаються в протилежних напрямках і відбиваються від стінок синього квадрата:

Керування клавішами Задача: жовтий квадрат всередині синього квадрата керується клавішами-стрілками. Коди клавіш: вліво – Керування клавішами Задача: жовтий квадрат всередині синього квадрата керується клавішами-стрілками. Коди клавіш: вліво – 37 вверх – 38 Esc – 27 вправо – 39 вниз – 40 Проблема: як змінити напрям руху? Розв’язання: Is. Event if {була подія} then begin if {натиснута клавіша} then begin Event ( k, code, i); if k = 1 then begin {отримати код клавіші - code} if code = 37 case code of then x : = x – 1; if code : = 38 – 1; 38: y y – 1; 37: x = x then y : = 1; if code : = 39 + 1; 40: y x + y + 1; 39: x = x then x : = 1; 27: stop : = True; if code = 40 then y : = y + 1; end; if code = 27 then stop : = True; end; якщо було натиснуто на клавішу, …

Програма program qq; процедура var x, y, k, code, i: integer; stop: boolean; procedure Програма program qq; процедура var x, y, k, code, i: integer; stop: boolean; procedure Draw(x, y: integer; flag: Boolean); begin. . . end; begin основний цикл. . . repeat Draw(x, y, True); Delay(20); Draw(x, y, False); опрацювання if Is. Event then begin подій. . . end; until stop; end. Що погано? ?

Як забрати блимання? Проблема: навіть якщо не натиснута жодна клавіша, квадрат перемальовується через кожні Як забрати блимання? Проблема: навіть якщо не натиснута жодна клавіша, квадрат перемальовується через кожні 20 мс (блимання!) Що бажається: не перемальовувати квадрат, якщо не було ніяких подій Розв’язання: намалювати квадрат і чекати подію Нова проблема: як чекати подію? Розв’язання нової проблеми: пустий цикл "поки не трапилася подія, нічого не робити": while not Is. Event do;

Програма program qq; var x, y, k, code, i: integer; процедура stop: boolean; procedure Програма program qq; var x, y, k, code, i: integer; процедура stop: boolean; procedure Draw(x, y: integer; flag: Boolean); begin. . . end; begin малюємо квадрат. . . repeat чекаємо подію Draw(x, y, True); while not Is. Event do; тільки тепер стираємо Draw(x, y, False); Event(k, code, i); . . . until stop; end. ? Що можна покращити?

Завдання Завдання "4": Квадрат рухається при натисненні стрілок, проте не може вийти за границі синього квадрата: "5": Квадрат неперервно рухається, при натисненні стрілок міняє напрям і відбивається від стінок синього квадрата:

Обертання Задача: зобразити модель обертання Землі навколо Сонця. Проблема: рух по колу, як змінюються Обертання Задача: зобразити модель обертання Землі навколо Сонця. Проблема: рух по колу, як змінюються координати? Розв’язання: використовувати в якості незалежної змінної (змінювати в циклі) кут повороту α (x, y) L x = x 0 + L·cos(α) α (x 0, y 0) y = y 0 – L·sin(α)

Процедура малювати (True) або ні (False)? procedure Draw(x, y: integer; flag: boolean); const r Процедура малювати (True) або ні (False)? procedure Draw(x, y: integer; flag: boolean); const r = 10; радіус Землі begin малюємо: колір пензлика – голубий if flag then Brush(1, 100, 255) else стираємо: колір пензлика – чорний Brush(1, 0, 0, 0); Ellipse(x-r, y-r, x+r, y+r); end; тільки заливка! (x-r, y-r) (x, y) (x+r, y+r)

Константи і змінні program qq; const r. Sun = 60; { радіус Сонця} L Константи і змінні program qq; const r. Sun = 60; { радіус Сонця} L = 150; { радіус орбіти Землі } x 0 = 200; { координати центра Сонця} y 0 = 200; var x, y, { координати Землі } k, code, i: integer; { для Event } a, ha: real; { кут повороту, крок } stop: boolean; { признак зупинки програми } procedure Draw(x, y: integer; flag: Boolean); begin. . . end.

Основна програма program qq; залити фон чорним. . . begin Brush(1, 0, 0, 0); Основна програма program qq; залити фон чорним. . . begin Brush(1, 0, 0, 0); Fill(1, 1); малюємо Сонце Brush(1, 255, 0); Ellipse(x 0 -r. Sun, y 0 -r. Sun, x 0+r. Sun, y 0+r. Sun); a : = 0; ha : = 1*pi/180; { початковий кут, крок 1 o за 100 мс} stop : = false; Pen(0, 0, 0, 0); { відключаємо контури } repeat x : = round(x 0 + L*cos(a)); нові координати y : = round(y 0 - L*sin(a)); Draw(x, y, True); чекаємо 100 мс Delay(100); Draw(x, y, False); if Is. Event then begin Event(k, code, i); if (k = 1) and (code = 27) then stop : = true; end; a : = a + ha; поворот на ha until stop; end.

Завдання Завдання "4": Зобразити модель Сонця з двома планетами, які обертаються в протилежних напрямках: "5": Зобразити модель системи Сонце-Земля. Місяць:

Програмування на мові Паскаль Тема 12. Випадкові числа Програмування на мові Паскаль Тема 12. Випадкові числа

Випадкові числа Випадкові події: всюди… • підкидання монети (“герб Випадкові числа Випадкові події: всюди… • підкидання монети (“герб" або “копійка") • падіння снігу • броунівський рух • перешкоди при телефонному зв’язку • шум радіоефіру Випадкові числа – це така послідовність чисел, для якої неможливо передбачити наступне число, якщо навіть відомі попередні. Проблема: як одержати на комп’ютері? Можливі розв’язання: • використовувати зовнішнє джерело шумових перешкод • з допомогою математичних перетворень

Псевдовипадкові числа – це така послідовність чисел, яка має властивості випадкових чисел, проте кожне Псевдовипадкові числа – це така послідовність чисел, яка має властивості випадкових чисел, проте кожне наступне число обчислюється по заданій формулі. Приклади: 1. Випадкові цілі числа [0, m) (лінійний конгруентний метод) a, c, m – цілі числа 230 -1 просте число 2. Випадкові дійсні числа [0, 1] наприклад, k = 5 Література: дробова частина числа Д. Кнут, Мистецтво програмування для ЕОМ, т. 2.

Розподіл випадкових чисел Модель: сніжинки падають на відрізок [a, b] розподіл рівномірний a ? Розподіл випадкових чисел Модель: сніжинки падають на відрізок [a, b] розподіл рівномірний a ? нерівномірний b a b Скільки може бути різних розподілів ?

Розподіл випадкових чисел Особливості: • розподіл – це характеристика всієї послідовності, а не одного Розподіл випадкових чисел Особливості: • розподіл – це характеристика всієї послідовності, а не одного числа • рівномірний розподіл один, комп’ютерні датчики (псевдо)випадкових чисел дають рівномірний розподіл • нерівномірних – багато • будь-яке нерівномірне можна отримати з допомогою рівномірного a b рівномірний розподіл

Генератор випадкових чисел в Паскалі Цілі числа в інтервалі [0, N]: var x: integer; Генератор випадкових чисел в Паскалі Цілі числа в інтервалі [0, N]: var x: integer; . . . x : = random ( 100 ); { інтервал [0, 99] } Дійсні числа в інтервалі [0, 1] var x: real; . . . x : = random; { інтервал [0, 1] }

Випадкові числа Задача: заповнити прямокутник 400 на 300 пікселів рівномірно точками випадкового кольору Як Випадкові числа Задача: заповнити прямокутник 400 на 300 пікселів рівномірно точками випадкового кольору Як отримати випадкові координати точки? x : = random ( 400 ); y : = random ( 300 ); Як досягти рівномірності? забезпечується автоматично при використанні функції random Як отримати випадковий колір? Pen (1, random(256), random(256)); Point ( x, y );

Програма program qq; var x, y, k, code, i: integer; stop: boolean; begin випадкові Програма program qq; var x, y, k, code, i: integer; stop: boolean; begin випадкові координати stop : = False; repeat x : = random(400); випадковий колір y : = random(300); Pen(1, random(256), random(256)); Point(x, y ); вихід по клавіші Esc if Is. Event then begin Event(k, code, i); if (k = 1) and (code = 27) then stop : = True; end; until stop; end.

Завдання Завдання "4": Ввести з клавіатури координати кутів прямокутника і заповнити (100, 100) його точками випадкового кольору. (300, 200) "5": Заповнити трикутник точками випадкового кольору (рівномірно або нерівномірно). Підказка: візьміть рівнобедрений трикутник з кутом 45 о.

Програмування на мові Паскаль Тема 13. Функції Програмування на мові Паскаль Тема 13. Функції

Функції Функція – це допоміжний алгоритм (підпрограма), результатом роботи якої є деяке значення. Приклади: Функції Функція – це допоміжний алгоритм (підпрограма), результатом роботи якої є деяке значення. Приклади: • обчислення , , • розрахунок значення по складених формулах • відповідь на запитання (просте число або ні? ) Для чого? • для обчислення однакових розрахунків в різних місцях програми • для створення загальнодоступних бібліотек функцій ? В чому відмінність від процедури?

Функції Задача: скласти функцію, яка обчислює більше з двох значень, і навести приклад її Функції Задача: скласти функцію, яка обчислює більше з двох значень, і навести приклад її використання Функція: формальні параметри function Max (a, b: integer): integer; begin if a > b then Max : = a else Max : = b; end. це результат функції

Функції Особливості: • заголовок починається словом function Max (a, b: integer): integer; • формальні Функції Особливості: • заголовок починається словом function Max (a, b: integer): integer; • формальні параметри описуються так само, як і для процедур function qq( a, b: integer; x: real ): real; • можна використовувати параметри-змінні function Max ( var a, b: integer): integer; • в кінці заголовка через двокрапку вказується тип результату function Max (a, b: integer): integer ; • функції розміщуються ВИЩЕ основної програми

Функції Особливості: • можна оголошувати і використовувати локальні змінні function qq (a, b: integer): Функції Особливості: • можна оголошувати і використовувати локальні змінні function qq (a, b: integer): float; var x, y: float; begin. . . end; • значення, яке є результатом, записується в змінну, ім’я якої співпадає з назвою функції; оголошувати НЕ ПОТРІБНО: function Max (a, b: integer): integer; begin. . . Max : = a; end; ! В Delphi: Result : = a;

Програма program qq; c var a, b, max: integer; function Max (a, b: integer): Програма program qq; c var a, b, max: integer; function Max (a, b: integer): integer; begin. . . end; begin фактичні параметри writeln(‘Введіть два числа'); read(a, b); виклик функції c max : = Max ( a, b ); c writeln(‘Найбільше число ', max ); end. ! Імена змінних, функцій і процедур не повинні співпадати!

Логічні функції Задача: скласти функцію, яка визначає, чи дійсно, що задане число – просте. Логічні функції Задача: скласти функцію, яка визначає, чи дійсно, що задане число – просте. Особливості: • відповідь – логічне значення (True або False) • результат функції можна використовувати як логічну величину в умовах (if, while) Алгоритм: рахуємо кількість дільників в інтервалі від 2 до N-1, якщо воно не дорівнює нулю – число складене. count : = 0; for i : = 2 to N-1 do if N mod i = 0 then count : = count + 1; if count = 0 then { число N просте} else { число N складене } ? Як краще?

Логічні функції program qq; var N: integer; результат – логічне значення function Prime (N: Логічні функції program qq; var N: integer; результат – логічне значення function Prime (N: integer): boolean; var count, i: integer; перебір тільки до begin i : = 2; count : = 0; while i*i <= N do if N mod i = 0 then count : = count + 1; i : = i + 1; end; Prime : = (count = 0); end; умова – це логічне значення begin writeln(‘Ввести ціле число'); read(N); виклик функції if Prime(N) then writeln(N, ' – просте число') else writeln(N, ' – складене число'); end.

Завдання Завдання "4": Скласти функцію, яка визначає суму всіх чисел від 1 до N і навести приклад її використання. Приклад: Ввести число: 100 сума = 5050 "5": Скласти функцію, яка визначає, скільки зерен попросив положити на N-ту клітку винахідник шахмат (на 1 -шу – 1 зерно, на 2 -у – 2 зерна, на 3 -ю – 4 зерна, …) Приклад: Ввести номер клітки: 28 На 28 -ой клітці 134217728 зерен.

Завдання (варіант 2) Завдання (варіант 2) "4": Скласти функцію, яка визначає найбільший спільний дільник двох натуральних чисел і навести приклад її використання. Приклад: Ввести два числа: 14 21 НСД(14, 21)=7 "5": Скласти функцію, яка обчислює синус як суму ряду (с точністю 0. 001) x в радіанах! Приклад: Ввести кут в градусах: 45 sin(45) = 0. 707