programuvanna_na_movi_pascal.ppt
- Количество слайдов: 159
Програмування на мові Паскаль Тема 1. Вступ
Алгоритм – це чітко визначений план дій для виконавця. Властивості алгоритму • дискретність: складається з окремих кроків (команд) • зрозумілість: повинен включати тільки команди відомі для виконавця (які містяться в СКВ) • визначеність: при однакових вхідних даних завжди видає один і той самий результат • скінченність: закінчується за скінчену кількість кроків • масовість: може застосовуватися багатократно при різних вихідних даних • коректність: видає правильне рішення при будьяких допустимих вихідних даних
Програма – це • алгоритм, записаний на будь-якій мові програмування • набір команд для комп’ютера Команда – це опис дій, які повинен виконати комп’ютер. • звідки отримати вихідні дані? • що потрібно з ними зробити?
Мови програмування • Машинно-орієнтовані (низького рівня) – кожна команда відповідає одній команді процесора (асемблер) • Мови високого рівня – наближені до реальної (англійської) мови, легше сприймаються людиною, не залежать відповідного комп’ютера • для навчання: Бейсик, ЛОГО, Паскаль • професійні: Сі, Фортран, Паскаль • для задач штучного інтелекту: Пролог, ЛИСП • для Інтернету: Java. Script, Java, Perl, PHP, ASP
Мова Паскаль 1970 – Ніклаус Вірт (Швейцарія) • мова для навчання студентів • розробка програм “зверху-вниз” Задача Підзадача 1 1. 2 1. 3 Підзадача 2 2. 1 2. 2 Підзадача 3 2. 3 3. 1 3. 2 3. 3 • різноманітні структури даних (масиви, структури, множини)
З чого складається програма? program <ім’я програми>; const …; {константи} var …; {змінні} { процедури і функції } begin … {основна програма} end. коментарі у фігурних дужках не опрацьовуються
З чого складається програма? Константа – постійна величина, яка має ім’я. Змінна – змінна величина, яка має ім’я (комірка пам’яті). Процедура – додатковий алгоритм, який описує деякі дії (малювання кола). Функція – додатковий алгоритм, для виконання обчислень (обчислення квадратного кореня, sin).
Імена програм, констант, змінних Імена можуть містити • латинські букви (A-Z) великі і маленькі букви не розрізняються • цифри ім’я не може починатися з цифри • знак підкреслення _ Імена НЕ можуть містити • українські букви • пропуски • дужки, знаки +, =, !, ? та ін. Які імена правильні? AXby R&B 4 Wheel Вася “Pes. Barbos” TU 154 [Qu. Qu] _ABBA A+B
Константи 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 ім’я змінної повинно знаходитися зліва від знака : = 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; 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 зліва направо • додаванні і віднімання зліва направо 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, b ); { ввести значення змінних a і b} Як вводяться два числа? 25 a 30 b через пропуск: 25 30 через Enter: 25 30 25 a 30 b
Оператор виведення write ( a ); { вивести значення змінної a} writeln ( a ); { вивести значення змінної a і перейти на новий рядок} writeln ( ‘Привіт!' ); { виведення тексту} writeln ( ‘Відповідь: ', c ); {виведення тексту і значення змінної c} writeln ( a, '+', b, '=', c );
Формати виведення 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(‘Ввести два цілих числа'); read ( a, b ); c : = a + b; writeln ( a, '+', b, '=', c ); end. Протокол: це виводить комп'ютер Ввести два цілих числа 25 30 це вводить користувач 25+30=55
Блок-схема лінійного алгоритму початок блок «початок» ввести 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. Розгалуження
Алгоритми розгалуження Задача. Ввести два цілих числа і вивести на екран більше з них. Ідея розв’язання: потрібно вивести на екран перше число, якщо воно більше другого, або друге, якщо воно більше першого. Особливості: дії виконавця залежать від деяких умов (якщо … інакше …). Алгоритми, в яких послідовність кроків залежить від виконання деяких умов, називаються розгалуженими.
Варіант 1. Блок-схема початок ввести a, b так a > b? max: = a; блок «логічний вираз» повна форма розгалуження ні max: = b; вивести max кінець ? Якщо a = b?
Варіант 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 {що робити, якщо умова неправильна} end; Особливості: • перед else НЕ ставиться крапка з комою • друга частина (else …) може бути відсутня (неповна форма) • якщо в блоці один оператор, можна забрати слова begin і end
Що неправильно? 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? max: = b; вивести max кінець ні неповна форма розгалуження
Варіант 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(‘Ввести два цілих числа'); read ( a, b ); max : = b; > if a ? ? ? b then ? ? ? max : = a; writeln (‘Більше число ', max); end.
Що неправильно? 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. Складені умови
Складені умови Задача. Фірма набирає співробітників від 25 до 40 років включно. Ввести вік людини і визначити, чи підходить вона фірмі (вивести відповідь “підходить” або “не підходить”). Особливості: потрібно перевірити, виконання двох умов одночасно. ? Чи можна розв’язати відомими методами?
Варіант 1. Алгоритм початок ввести x так ‘підходить' x <= 40? x >= 25? ні ні ‘не підходить' кінець ‘не підходить'
Варіант 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. Програма 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, xor • <, <=, >, >=, =, <> Особливості – кожна з простих умов обов'язково береться в дужки. Приклад 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin. . . end
Складена умова Істинне чи хибне при 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. Цикли
Цикли Цикл – це багатократне виконання однакової послідовності дій. • цикл з відомою кількістю кроків • цикл з невідомою кількістю кроків (цикл з умовою) Задача. Вивести на екран квадрати і куби цілих чисел від 1 до 8 (від a до b). Особливості: однакові дії виконуються 8 раз. ? Чи можна розв’язати відомими методами?
Алгоритм початок задати початкове значення змінної циклу 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 змінна циклу кінцеве значення 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 <кінцеве значення> do begin {тіло циклу} end; Зменшення змінної на 1: for <змінна> : = <початкове значення> downto <кінцеве значення> do begin {тіло циклу} end;
Цикл з змінною Особливості: • змінна повинна бути тільки цілою (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 : = 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 змінюється від 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 змінюється від 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. Цикли з умовою
Цикл з невідомою кількістю кроків Приклад: Відрізати поліно від колоди. Скільки разів потрібно зробити рух пилкою? Задача: Ввести ціле число (<2000000) і визначити кількість цифр у ньому. Ідея розв’язання: Відрізаємо послідовно останню цифру, збільшуємо лічильник. n count 123 0 12 1 1 2 0 3 Проблема: Невідомо, скільки кроків потрібно зробити. Розв’язання: Потрібно зупинитися, коли n = 0, тобто потрібно робити “поки n <> 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(‘Ввести ціле число'); 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 (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 < 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 {тіло циклу} 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, 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: Елемент послідовності (починаючи з № 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 : = 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 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) і визначити кількість цифр в ньому. Проблема: Як не дати ввести від'ємне число або нуль? Розв’язання: Якщо вводиться неправильне число, повернутися назад до введення даних (цикл!). Особливості: Один раз тіло циклу потрібно виконати в будь-якому випадку => перевірку умови циклу потрібно виконувати в кінці циклу (цикл с післяумовою). Цикл с післяумовою – це цикл, в якому перевірка умови виконується в кінці циклу.
Цикл з післяумовою: алгоритм початок ввести n тіло циклу ні n > 0? умова ВИХОДУ так основний алгоритм кінець блок "типовий процес"
Програма program qq; var n: integer; begin repeat writeln(‘Ввести додатне число'); read(n); умова ВИХОДУ until n > 0; . . . { основний алгоритм } end. Особливості: • тіло циклу завжди виконується хоча б один раз • після слова until ("до тих пір, поки не…") ставиться умова ВИХОДУ із циклу
Скільки разів виконується цикл? 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. Оператор вибору
Оператор вибору Задача: Ввести номер місяця і вивести кількість днів в цьому місяці. Розв’язання: Кількість днів у місяцях: 28 днів – 2 (лютий) 30 днів – 4 (квітень), 6 (червень), 9 (вересень), 11 (листопад) 31 день – 1 (січень), 3 (березень), 5 (травень), 7 (липень), 8 (серпень), 10 (жовтень), 12 (грудень) Особливості: Вибір не з двох, а з декількох варіантів в залежності від номера місяця. ? Чи можна розв’язати відомими методами?
Алгоритм початок ввести M M = 1? ні M = 2? так оператор вибору D : = 31; D : = 28; ні M = 12? ні жоден з варіантів не підійшов помилка кінець так D : = 31; вивести D
Програма 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 може бути ім’я змінної або арифметичний вираз цілого типу (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 можна не писати 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 : = 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. Графіка
Система координат X (0, 0) y x Y (x, y)
Керування кольором Колір і товщина ліній, колір точок: 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 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, 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, 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); (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 (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+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 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, 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. Графіки функцій
Побудова графіків функцій Задача: побудувати графік функції y = 3 sin(x) на інтервалі від 0 до 2π. Аналіз: максимальне значення ymax = 3 при x = π/2 мінімальне значення ymin = -3 при x = 3π/2 Проблема: функція задана в математичній системі координат, будувати потрібно на екрані, вказуючи координати в пікселях.
Перетворення координат Математична система координат Екранна система координат (пікселі) 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 = 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е) вибір варіанта дії логічна змінна 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. Процедури
Процедури Задача: Побудувати фігуру: ? Чи можна розв’язати відомими методами? Особливості: Три схожі фігури. подібності: розміри, кут повороту відмінності: координати, колір ? Скільки координат потрібно задати?
Процедури Процедура – це допоміжний алгоритм, який призначений для виконання деяких дій. Примітка: • виконання однакових дій в різних місцях програми • розбивка програми (або іншої процедури) на підзадачі для кращого сприймання Задача Підзадача 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, 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 (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 : = a; a : = b; b : = c; end; a, b: integer ); Примітка: таким чином процедура (і функція) можуть повертати декілька значень, Заборонені варіанти виклику Exchange ( 2, 3 ); { числа } Exchange ( x+z, y+2 ); { вирази }
Задания "4": Використовуючи процедуру, побудувати фігуру. "5": Використовуючи процедуру, побудувати фігуру.
Програмування на мові Паскаль Тема 10. Рекурсія
Рекурсивні об’єкти Казка про попа і собаку: Приклади: У попа була собака, він її любив. Вона з’їла кусок м’яса, він її убив. В ямку закопав, надпис написав: Казка про попа і собаку Малюнок з рекурсією: Факторіал: якщо Рекурсивний об’єкт – це об’єкт, визначений через один або декілька таких же об’єктів.
Дерево Піфагора з 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: 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); . . . довжина стовбура кут α 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. Анімація
Анімація (англ. 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 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; процедура 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 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 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 = 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 = 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); 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. Випадкові числа
Випадкові числа Випадкові події: всюди… • підкидання монети (“герб" або “копійка") • падіння снігу • броунівський рух • перешкоди при телефонному зв’язку • шум радіоефіру Випадкові числа – це така послідовність чисел, для якої неможливо передбачити наступне число, якщо навіть відомі попередні. Проблема: як одержати на комп’ютері? Можливі розв’язання: • використовувати зовнішнє джерело шумових перешкод • з допомогою математичних перетворень
Псевдовипадкові числа – це така послідовність чисел, яка має властивості випадкових чисел, проте кожне наступне число обчислюється по заданій формулі. Приклади: 1. Випадкові цілі числа [0, m) (лінійний конгруентний метод) a, c, m – цілі числа 230 -1 просте число 2. Випадкові дійсні числа [0, 1] наприклад, k = 5 Література: дробова частина числа Д. Кнут, Мистецтво програмування для ЕОМ, т. 2.
Розподіл випадкових чисел Модель: сніжинки падають на відрізок [a, b] розподіл рівномірний a ? нерівномірний b a b Скільки може бути різних розподілів ?
Розподіл випадкових чисел Особливості: • розподіл – це характеристика всієї послідовності, а не одного числа • рівномірний розподіл один, комп’ютерні датчики (псевдо)випадкових чисел дають рівномірний розподіл • нерівномірних – багато • будь-яке нерівномірне можна отримати з допомогою рівномірного a b рівномірний розподіл
Генератор випадкових чисел в Паскалі Цілі числа в інтервалі [0, N]: var x: integer; . . . x : = random ( 100 ); { інтервал [0, 99] } Дійсні числа в інтервалі [0, 1] var x: real; . . . x : = random; { інтервал [0, 1] }
Випадкові числа Задача: заповнити прямокутник 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 випадкові координати 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. Функції
Функції Функція – це допоміжний алгоритм (підпрограма), результатом роботи якої є деяке значення. Приклади: • обчислення , , • розрахунок значення по складених формулах • відповідь на запитання (просте число або ні? ) Для чого? • для обчислення однакових розрахунків в різних місцях програми • для створення загальнодоступних бібліотек функцій ? В чому відмінність від процедури?
Функції Задача: скласти функцію, яка обчислює більше з двох значень, і навести приклад її використання Функція: формальні параметри function Max (a, b: integer): integer; begin if a > b then Max : = a else Max : = b; end. це результат функції
Функції Особливості: • заголовок починається словом 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): 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): 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: 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) "4": Скласти функцію, яка визначає найбільший спільний дільник двох натуральних чисел і навести приклад її використання. Приклад: Ввести два числа: 14 21 НСД(14, 21)=7 "5": Скласти функцію, яка обчислює синус як суму ряду (с точністю 0. 001) x в радіанах! Приклад: Ввести кут в градусах: 45 sin(45) = 0. 707


