SlideShare a Scribd company logo
1 of 159
Програмування на
мові Паскаль
Тема 1. Вступ
© К.Ю. Поляков
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Алгоритм
Властивості алгоритму
• дискретність: складається з окремих кроків
(команд)
• зрозумілість: повинен включати тільки команди
відомі для виконавця (які містяться в СКВ)
• визначеність: при однакових вхідних даних завжди
видає один і той самий результат
• скінченність: закінчується за скінчену кількість
кроків
• масовість: може застосовуватися багатократно при
різних вихідних даних
• коректність: видає правильне рішення при будь-
яких допустимих вихідних даних
Алгоритм – це чітко визначений план дій для
виконавця.
Програма
Програма – це
• алгоритм, записаний на будь-якій мові
програмування
• набір команд для комп’ютера
Команда – це опис дій, які повинен
виконати комп’ютер.
• звідки отримати вихідні дані?
• що потрібно з ними зробити?
Мови програмування
• Машинно-орієнтовані (низького рівня) – кожна
команда відповідає одній команді процесора
(асемблер)
• Мови високого рівня – наближені до реальної
(англійської) мови, легше сприймаються
людиною, не залежать від відповідного
комп’ютера
• для навчання: Бейсик, ЛОГО, Паскаль
• професійні: Сі, Фортран, Паскаль
• для задач штучного інтелекту: Пролог,
ЛИСП
• для Інтернету: JavaScript, Java, Perl, PHP,
ASP
Мова Паскаль
1970 – Ніклаус Вірт (Швейцарія)
• мова для навчання студентів
• розробка програм “зверху-вниз”
• різноманітні структури даних (масиви,
структури, множини)
Підзадача1 Підзадача2 Підзадача3
1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3
Задача
З чого складається програма?
program <ім’я програми>;
const …;{константи}
var …; {змінні}
begin
… {основна програма}
end.
{ процедури і функції }
коментарі у фігурних дужках не
опрацьовуються
З чого складається програма?
Константа – постійна величина, яка має
ім’я.
Змінна – змінна величина, яка має ім’я
(комірка пам’яті).
Процедура – додатковий алгоритм, який
описує деякі дії (малювання кола).
Функція – додатковий алгоритм, для
виконання обчислень (обчислення
квадратного кореня, sin).
Імена програм, констант, змінних
Імена можуть містити
• латинські букви (A-Z)
• цифри
• знак підкреслення _
великі і маленькі букви не розрізняються
Імена НЕ можуть містити
• українські букви
• пропуски
• дужки, знаки +, =, !, ? та ін.
ім’я не може починатися з цифри
Які імена правильні?
AXby R&B 4Wheel Вася “PesBarbos”
TU154 [QuQu] _ABBA A+B
Константи
const
i2 = 45; { ціле число }
pi = 3.14; { дійсне число }
qq = 'Вася'; { рядок символів }
L = True; { логічна величина }
ціла і дробова частина відділяються крапкою
можна використовувати українські букви!
Може приймати два значення:
• True (істина, “так")
• False (хибність, "ні")
Змінні
Змінна – це величина, яка має ім’я, тип і значення.
Значення змінної величини під час виконання
програми може змінюватися.
Типи змінних:
• integer { цілі }
• real { дійсні }
• char { один символ }
• string { рядок }
• boolean { логічні }
Оголошення змінних (виділення пам’яті):
var a, b: integer;
Q: real;
s1, s2: string;
Як змінюється значення змінної?
Оператор – це команда мови програмування високого
рівня.
Оператор присвоєння служить для зміни значення
змінної.
Приклад:
program qq;
var a, b: integer;
begin
a := 5;
b := a + 2;
a := (a + 2)*(b – 3);
end.
a
? 55
b
? 5+27
a
5 7*428
Оператор присвоєння
Загальна структура:
<ім’я змінної> := <вираз>;
Арифметичні вирази можуть містити
• константи
• імена змінних
• знаки арифметичних дій:
+ - * / 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)((
)(5 22
addc
badca
x



)(
)(35
cb
ab
dcac
z 


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 30
через Enter:
25
30
a25
b30
a25
b30
Оператор виведення
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<
> 15<
>1.234568E+001<
> 1.23E+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
це виводить комп'ютер
це вводить користувач
Блок-схема лінійного алгоритму
початок
кінець
c := a + b;
ввести 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. Розгалуження
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Алгоритми розгалуження
Задача. Ввести два цілих числа і вивести на екран
більше з них.
Ідея розв’язання: потрібно вивести на екран перше
число, якщо воно більше другого, або друге, якщо воно
більше першого.
Особливості: дії виконавця залежать від деяких умов
(якщо … інакше …).
Алгоритми, в яких послідовність кроків залежить від
виконання деяких умов, називаються розгалуженими.
Варіант 1. Блок-схема
початок
max:= a;
ввести a,b
вивести max
a > b?
max:= b;
кінець
так ні повна форма
розгалуження
блок «логічний
вираз»
Якщо a = b??
Варіант 1. Програма
program qq;
var a, b, max: integer;
begin
writeln(‘Ввести два цілих числа');
read ( a, b );
if a > b then begin
end
else begin
end;
writeln (‘Більше число ', max);
end.
max := a;
max := b;
повна форма
умовного
оператора
Умовний оператор
if <умова> then begin
{що робити, якщо умова правильна}
end
else begin
{що робити, якщо умова неправильна}
end;
Особливості:
• перед else НЕ ставиться крапка з комою
• друга частина (else …) може бути відсутня (неповна
форма)
• якщо в блоці один оператор, можна забрати слова
begin і end
Що неправильно?
if a > b then begin
a := b;
end
else
b := a;
end;
if a > b then begin
a := b;
else begin
b := a;
end;
if a > b then begin
a := b;
end;
else begin
b := a;
end;
if a > b then begin
a := b;
end
else b > a begin
b := a;
end;
begin
end
begin
end
Варіант 2. Блок-схема
неповна форма
розгалуження
початок
max:= a;
ввести a,b
вивести max
max:= b;
кінець
так ні
b > a?
Варіант 2. Програма
program qq;
var a, b, max: integer;
begin
writeln(‘Ввести два цілих числа');
read ( a, b );
max := a;
if b > a then
writeln (‘Більше число ', max);
end.
max := b;
неповна форма
умовного
оператора
Варіант 2Б. Програма
program qq;
var a, b, max: integer;
begin
writeln(‘Ввести два цілих числа');
read ( a, b );
max := b;
if ??? then
???
writeln (‘Більше число ', max);
end.
max := a;
a > b
Що неправильно?
if a > b then begin
a := b;
else b := a;
if a > b then begin
a := b;
end;
else b := a;
if a > b then
else begin
b := a;
end;
if a > b then
a := b;
else b := a; end;
a := b
end
a := b if b >= a then
b := a;
Завдання
"4": Ввести три числа і знайти найбільше з них.
Приклад:
Ввести три числа:
4 15 9
Найбільше число 15
"5": Ввести п’ять чисел і знайти найбільше з них.
Приклад:
Ввести п’ять чисел:
4 15 9 56 4
Найбільше число 56
Програмування на
мові Паскаль
Тема 3. Складені умови
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Складені умови
Задача. Фірма набирає співробітників від 25 до 40 років
включно. Ввести вік людини і визначити, чи підходить
вона фірмі (вивести відповідь “підходить” або “не
підходить”).
Особливості: потрібно перевірити, виконання двох умов
одночасно.
Чи можна розв’язати відомими методами??
Варіант 1. Алгоритм
початок
ввести x
‘підходить'
кінець
так ні
x >= 25?
так ні
x <= 40?
‘не підходить' ‘не підходить'
Варіант 1. Програма
program qq;
var x: integer;
begin
writeln(‘Ввести вік');
read ( x );
if x >= 25 then
if x <= 40 then
writeln (‘Підходить')
else 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;
not (a > b)
(a < b) and (b < c)
not (a >= b) or (c = d)
(a < c) or (b < c) and (b < a)
(a < b) xor not (b > c)
Для яких значень x істинні умови:
(x < 6) and (x < 10)
(x < 6) and (x > 10)
(x > 6) and (x < 10)
(x > 6) and (x > 10)
(x < 6) or (x < 10)
(x < 6) or (x > 10)
(x > 6) or (x < 10)
(x > 6) or (x > 10)
Складена умова
True
True
FALSE
(-, 6)

(6, 10)
(10, )
(-, 10)
(-, 6)  (10,)
(-, )
(6, )
x < 6
x > 10
x < 10
x > 6
True
True
Завдання
"4": Ввести номер місяця і вивести назву пори року.
Приклад:
Ввести номер місяця:
4
весна
"5": Ввести вік людини (від 1 до 150 років) и вивести
його разом з наступним слово “рік”, “роки" або
“років".
Приклад:
Ввести вік: Ввести вік:
24 57
Вам 24 роки Вам 57 років
Програмування на
мові Паскаль
Тема 4. Цикли
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Цикли
Цикл – це багатократне виконання однакової
послідовності дій.
• цикл з відомою кількістю кроків
• цикл з невідомою кількістю кроків (цикл з умовою)
Задача. Вивести на екран квадрати і куби цілих чисел від
1 до 8 (від a до b).
Особливості: однакові дії виконуються 8 раз.
Чи можна розв’язати відомими методами??
Алгоритм
початок
i, i2, i3
кінець
ні
так
i <= 8?
i := 1;
i := i + 1;
i2 := i * i;
i3 := i2 * i;
задати початкове значення
змінної циклу
перевірити, чи все виконали
обчислити квадрат і куб
вивести результат
перейти до
наступного i
Алгоритм (з блоком "цикл")
початок
i, i2, i3
кінець
i2 := i * i;
i3 := i2 * i;
i := 1,8
блок "цикл"
тіло циклу
Програма
program qq;
var i, i2, i3: integer;
begin
for i:=1 to 8 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end.
змінна циклу
початкове значення
кінцеве значення
Цикл з зменшенням змінної
Задача. Вивести на екран квадрати і куби цілих чисел від
8 до 1 (в зворотному порядку).
Особливості: змінна циклу повинна зменшуватися.
Розв’язання:
...
for i:=8 1 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
...
downto
Цикл з змінною
for <змінна> := <початкове значення> to
<кінцеве значення> do begin
{тіло циклу}
end;
Збільшення змінної на 1:
for <змінна> := <початкове значення>
downto
<кінцеве значення> do begin
{тіло циклу}
end;
Зменшення змінної на 1:
Цикл з змінною
Особливості:
• змінна повинна бути тільки цілою (integer)
• крок зміни змінної циклу завжди рівний 1 (to) або -1
(downto)
• якщо в тілі циклу тільки один оператор, слова
begin і end можна не писати:
• якщо кінцеве значення менше початкового, цикл (to)
не виконується ні разу (перевірка умови в початку
циклу, цикл з передумовою)
for i:=1 to 8 do
writeln(‘Привіт');
Цикл з змінною
Особливості:
• в тілі циклу не дозволяється змінювати змінну циклу
(чому?)
• при зміні початкового і кінцевого значення всередині
циклу кількість кроків не змінюється:
n := 8;
for i:=1 to n do begin
writeln('Привіт');
n := n + 1;
end;
немає
зациклювання
Цикл з змінною
Особливості:
• після виконання циклу в багатьох системах
встановлюється перше значення змінної циклу, при
якому порушується умова:
for i:=1 to 8 do
writeln('Привіт');
writeln('i=', i);
for i:=8 downto 1 do
writeln('Привіт');
writeln('i=', i);
i=9
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 ??? then begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
end;
...
i mod 2 = 1
виконується
тільки для
непарних i
Що погано??
Як змінюється крок? – II
Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється
від 1 до 5. Початкове значення i дорівнює 1, з кожним
кроком циклу i збільшується на 2.
Розв’язання:
...
???
for k:=1 to 5 do begin
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
???
end;
...
i := i + 2;
i := 1;
Як змінюється крок? – III
Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється
від 1 до 5. Знаючи k, потрібно розрахувати i.
Розв’язання:
...
for k:=1 to 5 do begin
???
i2 := i*i;
i3 := i2*i;
writeln(i:4, i2:4, i3:4);
end;
...
i := 2*k – 1;
k 1 2 3 4 5
i 1 3 5 7 9
i = 2k-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. Цикли з умовою
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Цикл з невідомою кількістю кроків
Приклад: Відрізати поліно від бревна. Скільки разів потрібно
зробити рух пилкою?
Задача: Ввести ціле число (<2000000) і визначити кількість
цифр у ньому.
Ідея розв’язання: Відрізаємо послідовно останню цифру,
збільшуємо лічильник.
Проблема: Невідомо, скільки кроків потрібно зробити.
Розв’язання: Потрібно зупинитися, коли n = 0, тобто потрібно
робити “поки n <> 0".
n count
123 0
12 1
1 2
0 3
Алгоритм
початок
count
кінець
ні
так
n <> 0?
count := 0;
count := count + 1;
n := n div 10;
обнулити лічильник цифр
ввести n
виконувати
"поки n <> 0"
Програма
program qq;
var n, count: integer;
begin
writeln(‘Ввести ціле число');
read(n);
count := 0;
while n <> 0 do begin
count := count + 1;
n := n div 10;
end;
writeln('В числі ', n, ' знайшли ',
count, ' цифр');
end.
, n1: integer;
n1 := n;
n1,
виконувати
"поки n <> 0"
Що погано??
Цикл с умовою
while <умова> do begin
{тіло циклу}
end;
Особливості:
• можна використовувати складені умови:
• якщо в тілі циклу тільки один оператор, слова
begin і end можна не писати:
while (a<b) and (b<c) do begin
{тіло циклу}
end;
while a < b do
a := a + 1;
Цикл з умовою
Особливості:
• умова перевіряється кожен раз при вході в цикл
• якщо умова на вході в цикл хибна, цикл не
виконується жодного разу
• якщо умова ніколи не стане хибною, програма
зациклиться
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;
i := 1;
while i <= 10 do begin
{тіло циклу}
i := i + 1;
end;
for i:=a downto b do
begin
{тіло циклу}
end;
i := a;
while i >= b do begin
{тіло циклу}
i := i - 1;
end;
Заміна while на for можлива тільки тоді, коли можна
наперед розрахувати кількість кроків циклу.
Заміна циклу for на while можлива завжди.
Завдання
"4": Ввести ціле число і знайти суму його цифр.
Приклад:
Ввести ціле число:
1234
Сума цифр числа 1234 рівна 10.
"5": Ввести ціле число і визначити, чи правда, що в
його записі є дві однакові цифри.
Приклад:
Ввести ціле число: Ввести ціле число:
1234 1224
Ні. Так.
Послідовності
Приклади:
• 1, 2, 3, 4, 5, …
• 1, 2, 4, 7, 11, 16, …
• 1, 2, 4, 8, 16, 32, …
• ...,
32
5
,
4
1
,
8
3
,
2
1
,
2
1
...,
32
5
,
16
4
,
8
3
,
4
2
,
2
1
an = n a1 = 1, an+1 = an+1
a1 = 1, an+1 = an + n
an = 2n-1 a1 = 1, an+1 = 2an
b1 = 1, bn+1 = bn+1
c1 = 2, cn+1 = 2cnn
n
n
c
b
a 
Послідовності
Задача: знайти суму всіх елементів послідовності,
які по модулю більші 0,001:
...,
32
5
,
16
4
,
8
3
,
4
2
,
2
1
,1 
...
32
5
16
4
8
3
4
2
2
1
1 S
Елемент послідовності (починаючи з №2):
c
b
za 
n 1 2 3 4 5 ...
b 1 2 3 4 5 ...
c 2 4 8 16 32 ...
z -1 1 -1 1 -1 ...
b := b+1;
c := 2*c;
z := -z;
Алгоритм
початок
S
кінець
ні
так
|a| > 0.001?
S := S + a;
S := 0; b := 1;
c := 2; z := -1;
a := 1;
початкове
значення
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
...
819
8
277
6
95
4
33
2
1 







S
...
24313
10
818
8
275
6
93
4
32
2
1 









S
Цикл з післяумовою
Задача: Ввести ціле додатне число (<2000000) і
визначити кількість цифр в ньому.
Проблема: Як не дати ввести від'ємне число або нуль?
Розв’язання: Якщо вводиться неправильне число,
повернутися назад до введення даних (цикл!).
Особливості: Один раз тіло циклу потрібно виконати в
будь-якому випадку => перевірку умови циклу потрібно
виконувати в кінці циклу (цикл с післяумовою).
Цикл с післяумовою – це цикл, в якому перевірка умови
виконується в кінці циклу.
Цикл з післяумовою: алгоритм
початок
кінець
так
ні
n > 0?
тіло циклу
умова ВИХОДУ
блок "типовий
процес"
ввести n
основний
алгоритм
Програма
program qq;
var n: integer;
begin
repeat
writeln(‘Ввести додатне число');
read(n);
until n > 0;
... { основний алгоритм }
end.
until n > 0;
умова ВИХОДУ
Особливості:
• тіло циклу завжди виконується хоча б один раз
• після слова 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: Введіть число >= 0:
2323 1234
Повторяються: 2, 3 Немає повторів.
Програмування
на мові Паскаль
Тема 6. Оператор вибору
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Оператор вибору
Задача: Ввести номер місяця і вивести кількість
днів в цьому місяці.
Розв’язання: Кількість днів у місяцях:
28 днів – 2 (лютий)
30 днів – 4 (квітень), 6 (червень), 9 (вересень),
11 (листопад)
31 день – 1 (січень), 3 (березень), 5 (травень),
7 (липень), 8 (серпень), 10 (жовтень),
12 (грудень)
Особливості: Вибір не з двох, а з декількох варіантів в
залежності від номера місяця.
Чи можна розв’язати відомими методами??
Алгоритм
початок
кінець
оператор вибору
жоден з
варіантів
не підійшов
ввести M
так
ні
M = 1? D := 31;
ні
M = 2? 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)
або символьного типа (char)
case i+3 of
1: begin a := b; end;
2: begin a := c; end;
end;
var c: char;
...
case c of
'а': writeln('Антилопа');
'б': writeln('Борсук');
else writeln('Не знаю');
end;
Оператор вибору
Особливості:
• якщо потрібно виконати тільки один оператор,
слова begin і end можна не писати
• не можна ставити два однакових значення
case i+3 of
1: a := b;
1: a := c;
end;
case i+3 of
1: a := b;
2: 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;
end;
3..6:
case a+c/2 of
2: a := b;
4: a := c;
end;
case a of
2: a := b; d := 0;
4: a := c;
end;
begin
end;
Завдання (з захистом від неправильного введення)
"4": Ввести номер місяця і вивести кількість днів в ньому, а
також кількість помилок при введенні.
Приклад:
Введіть номер місяця: Введіть номер місяця:
-2 2
Введіть номер місяця: В цьому місяці 28 днів.
11 Ви вводили неправильно 0 раз.
В цьому місяці 30 днів.
Ви вводили неправильно 1 раз.
"5": Ввести номер місяця і номер дня, вивести кількість
днів, які залишилися до Нового року.
Приклад:
Ввести номер місяця:
12
Ввести день:
25
До Нового року залишилося 6 днів.
Програмування на
мові Паскаль
Тема 7. Графіка
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Система координат
(0,0)
(x,y)
X
Y
x
y
Керування кольором
Колір і товщина ліній, колір точок:
Pen ( 1, 255, 0, 0 );
Колір і стиль заливки:
Brush ( 1, 0, 255, 0 );
Колір тексту:
TextColor ( 0, 0, 255 );
товщина
лінії
R(red)
0..255
G(green)
0..255
B(blue)
0..255
0 – виключити
1 – включити
R G B
R G B
Точки, відрізки і ламані
(x1, y1)
(x2, y2) Pen (1, 0, 255, 0);
Line (x1, y1, x2, y2);
(x, y) Pen (1, 0, 0, 255);
Point (x, y);
(x1, y1) (x2, y2)
(x3, y3)
(x4, y4)
(x5, y5)
Pen (1, 255, 0, 0);
MoveTo (x1, y1);
LineTo (x2, y2);
LineTo (x3, y3);
LineTo (x4, y4);
LineTo (x5, y5);
Фігури з заливкою
(x1, y1)
(x2, y2)
Pen (1, 0, 0, 255);
Brush (1, 255, 255, 0);
Rectangle (x1, y1, x2, y2);
(x1, y1)
(x2, y2)
Pen (1, 255, 0, 0);
Brush (1, 0, 255, 0);
Ellipse (x1, y1, x2, y2);
Brush (1, 100, 200, 255);
Fill (x, y);
(x, y)
Як відмінити заливку??
Текст
TextColor (0, 0, 255);
Brush (1, 255, 255, 0);
Font (20, 30, 600);
MoveTo (x, y);
writeln ('Привіт!');
(x, y)
розмір
10 пікселів
кут
повороту
насиченість:
400 – нормальний
600 – жирний
30о
Приклад
(200, 50)
(100, 100)
(300, 200)
program qq;
begin
Pen(2, 255, 0, 255);
Brush(1, 0, 0, 255);
Rectangle(100, 100, 300, 200);
MoveTo(100, 100);
LineTo(200, 50);
LineTo(300, 100);
Brush(1, 255, 255, 0);
Fill(200, 75);
Pen(2, 255, 255, 255);
Brush(1, 0, 255, 0);
Ellipse(150, 100, 250, 200);
end.
Завдання
"4": "Жабка"
"5": "Корона"
Штриховка
(x1, y1)
(x2, y2)
N ліній (N=5)
h
1
12



N
xx
h
Rectangle (x1, y1, x2, y2);
Line( x1+h, y1, x1+h, y2);
Line( x1+2*h, y1, x1+2*h, y2);
Line( x1+3*h, y1, x1+3*h, y2);
...
h := (x2 – x1) / (N + 1);
Rectangle (x1, y1, x2, y2);
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x), y2);
x := x + h;
end;
var x, h: real;
x
заокруглення до
найближчого цілого
x
Як міняти колір?
(x1, y1)
(x2, y2)
Brush ( 1, c, c, c );
Fill ( ???, ??? );
сірий: R = G = B
Крок зміни c:
1
255


N
hc
x
(x-1, y1+1)
var c, hc: integer;
hc := 255 div (N + 1);
c := 0;
for i:=1 to N+1 do begin
Line (round(x), y1, round(x), y2);
Brush (1, c, c, c);
Fill (round(x)-1, y1+1);
x := x + h; c := c + hc;
end;
Штриховка
(x1, y1)
(x2, y2) (x3, y2)
a
h
1
23



N
xx
h12 xxa (x3+a, y1)
Line( x1+h, y1, x1+h-a, y2);
Line( x1+2*h, y1, x1+2*h-a, y2);
Line( x1+3*h, y1, x1+3*h-a, y2);
...
h := (x3 – x2) / (N + 1);
a := x2 – x1;
x := x1 + h;
for i:=1 to N do begin
Line( round(x), y1, round(x-a), y2);
x := x + h;
end;
x x-a
Штриховка
(x1, y1)
(x2, y2)
hx
hy
y x y
Line( x1, y1+hy, x1+hx, y1+hy) ;
Line( x1, y1+2*hy, x1+2*hx, y1+2*hy);
Line( x1, y1+3*hy, x1+3*hx, y1+3*hy);
...
1
12



N
xx
hx
1
12



N
yy
hy
hx := (x2 – x1) / (N + 1);
hy := (y2 – y1) / (N + 1);
x := x1 + hx; y := y1 + hy;
for i:=1 to N do begin
Line( x1, round(y), round(x), round(y));
x := x + hx; y := y + hy;
end;
Завдання
"4": Ввести з клавіатури кількість ліній штриховки і
побудувати фігуру, заливши всі області різним
кольором.
"5": Ввести з клавіатури кількість кіл і побудувати фігуру,
заливши всі області різними кольорами.
Програмування на
мові Паскаль
Тема 8. Графіки функцій
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Побудова графіків функцій
Задача: побудувати графік функції y = 3 sin(x) на
інтервалі від 0 до 2π.
Аналіз:
максимальне значення ymax = 3 при x = π/2
мінімальне значення ymin = -3 при x = 3π/2
Проблема: функція задана в математичній системі
координат, будувати потрібно на екрані, вказуючи
координати в пікселях.
Перетворення координат
(x,y)
X
Y
x
y
Математична
система координат
Екранна система
координат (пікселі)
(xе,yе)
xе
yе
(0,0)
(0,0)
a
b
k – масштаб (довжина
зображення одиничного
відрізка на екрані)
xе = a + kx
yе = b - ky
Програма
2π
h – крок зміни x
w – довжина осі ОХ в пікселях
на екрані
осі координат
цикл
побудови
графіка
program qq;
const a = 50; b = 200; k = 50;
xmin = 0; xmax = 6.2832;
var x, y, h: real;
xe, ye, w: integer;
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;
end. Що погано??
Як з’єднати точки?
Алгоритм:
Якщо перша точка
перейти в точку (xе,yе)
інакше
відрізок в точку (xе,yе)
Програма:
початкове значення
вибір
варіанта
дії
логічна змінна
var first: boolean;
...
begin
...
first := True;
while x <= xmax do begin
...
if first then begin
MoveTo(xe, ye);
first := False;
end
else LineTo(xe, ye);
...
end;
end.
Завдання
"4": Побудувати графік
функції y = x2 на інтервалі
[-3,3].
"5": Побудувати графік
функції (еліпс)
1
916
22

yx
Програмування на
мові Паскаль
Тема 9. Процедури
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Процедури
Задача: Побудувати фігуру:
Особливості: Три схожі фігури.
подібності: розміри, кут повороту
відмінності: координати, колір
Чи можна розв’язати відомими методами??
Скільки координат потрібно задати??
Процедури
Процедура – це допоміжний алгоритм, який призначений
для виконання деяких дій.
Примітка:
• виконання однакових дій в різних місцях програми
• розбивка програми (або іншої процедури) на
підзадачі для кращого сприймання
Підзадача1 Підзадача2 Підзадача3
1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3
Задача
Процедури
Порядок розробки:
• виділити однакові або схожі дії (три фігури)
• знайти в них спільне (розміри, форма, кут повороту) і
відмінності (координати, колір)
• відмінності записати у вигляді невідомих змінних, вони будуть
параметрами процедури
(x, y) 100
60 (x+100, y)
(x, y-60)
procedure Tr( x, y, r, g, b: integer);
begin
MoveTo(x, y);
LineTo(x, y-60);
LineTo(x+100, y);
LineTo(x, y);
Brush(1, r, g, b);
Fill(x+20, y-20);
end;
заголовок
тіло процедури
координати
колір
параметри
Програма
program qq;
begin
Pen(1, 255, 0, 255);
Tr(100, 100, 0, 0, 255);
Tr(200, 100, 0, 255, 0);
Tr(200, 160, 255, 0, 0);
end.
(100,100)
100
60
процедура
фактичні параметри
виклик
процедури
procedure Tr( x, y, r, g, b: integer);
begin
...
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;
begin
x := 1; y := 2;
Exchange ( x, y );
writeln ( ’x = ’, x, ’ y = ’, y );
end;
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
ця процедура
працює з
копіями
параметрів
x = 1 y = 2
Параметри-змінні
Примітка:
таким чином процедура (і функція) можуть повертати
декілька значень,
Заборонені варіанти виклику
Exchange ( 2, 3 ); { числа }
Exchange ( x+z, y+2 ); { вирази }
procedure Exchange ( a, b: integer );
var c: integer;
begin
c := a; a := b; b := c;
end;
var
параметри можуть змінюватися
Задания
"4": Використовуючи процедуру, побудувати фігуру.
"5": Використовуючи процедуру, побудувати фігуру.
Програмування на
мові Паскаль
Тема 10. Рекурсія
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Рекурсивні об’єкти
Рекурсивний об’єкт – це об’єкт, визначений через один
або декілька таких же об’єктів.
У попа була собака, він її любив.
Вона з’їла кусок м’яса, він її убив.
В ямку закопав, надпис написав:
Казка про попа і собаку
Приклади: Казка про попа і собаку:
Факторіал:






.1,)!1(
,1,1
!
NNN
N
N
якщо
якщо
12)1(!
1234!34!4
123!23!3,12!12!2,1!1



NNN
Малюнок з рекурсією:
Дерево Піфагора
Дерево Піфагора з N рівнів – це стовбур і відходячі від нього
симетрично два дерева Піфагора з N-1 рівнем, такі що довжина
їх стовбурів в 2 рази менша і кут між ними рівний 90o.
6 рівнів:
Як довести, що це рекурсивна фігура??
Дерево Піфагора
Особливості:
• коли зупинитися?
• дерева мають різний нахил
коли кількість рівнів, що
залишилися стане рівним
нулю!
(x1, y1)
(x0, y0)
α
α+45o
α-45o
L
x1 = x0 + L·cos(α)
y1 = y0 – L·sin(α)
нахил "дочірніх" дерев
α + π/4
α – π/4
Процедура кут α довжина стовбура
procedure Pifagor(x0, y0, a, L: real;
N: integer);
const k = 0.6; { зміна довжини }
var x1, y1: real; { локальні змінні }
begin
if N > 0 then begin
x1 := x0 + L*cos(a);
y1 := y0 - L*sin(a);
Line (round(x0), round(y0),
round(x1), round(y1));
Pifagor (x1, y1, a+pi/4, L*k, N-1);
Pifagor (x1, y1, a-pi/4, L*k, N-1);
end;
end;
рекурсивні
виклики
завершити, якщо N=0
Рекурсивною називається процедура,
викликаюча сама себе.
Програма
program qq;
procedure Pifagor(x0, y0, a, L: real;
N: integer);
...
end;
begin
Pifagor (250, 400, pi/2, 150, 8);
end;
кут α довжина стовбура
кількість рівнівx0 y0
Як нахилити дерево вправо на 30o??
Pifagor (250, 400, 2*pi/3, 150, 8);
"4": Використовуючи рекурсивну процедуру, побудувати фігуру:
"5": Використовуючи рекурсивну процедуру, побудувати фігуру :
Задания
Програмування на
мові Паскаль
Тема 11. Анімація
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Анімація
Анімація (англ. animation) – оживлення
зображення на екрані.
Задача: всередині синього квадрата 400 на 400
пікселів зліва направо рухається жовтий
квадрат 20 на 20 пікселів. Програма
зупиняється, якщо натиснута клавіша Esc
або квадрат дійшов до границі синьої
області.
Проблема: як зобразити переміщення об’єкта на екрані?
Прив’язка: розміщення об’єкта задається координатами (x,y)
Принцип анімації:
1. малюємо об’єкт в точці (x,y)
2. затримка на декілька мілісекунд
3. затираємо об’єкт
4. змінюємо координати (x,y)
5. переходимо до кроку 1
Як "зловити" натискуванням клавіші?
Подія – це зміна в стані якого-небудь об’єкта або дія
користувача (натиснення на клавішу, клік мишкою).
IsEvent – логічна функція, яка визначає, чи були які-небудь
дії користувача.
Event – процедура, яка визначає, які саме дії відбулися.
if IsEvent then begin
Event(k, x, y);
if k = 1 then
writeln('Клавіша з кодом ', x)
else { k = 2 }
writeln('Мишка: x=', x, ' y=', y);
end;
var k, x, y: integer;
Як вийти з циклу при натисканні Esc?
program qq;
var stop: boolean;
k,code,i: integer;
begin
stop := False;
repeat
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then
stop := True;
end;
...
until stop;
end;
якщо що-небудь відбулося...
що відбулося?
якщо натиснута клавіша
з кодом 27 (Esc), то стоп
True, якщо потрібно зупинитися
запуск циклу
Процедура (малювання і стирання)
procedure Draw(x, y: integer; flag: boolean);
begin
if flag then
Brush(1, 255, 255, 0)
else
Brush(1, 0, 0, 255);
Rectangle(x, y, x+20, y+20);
end;
(x, y)
(x+20, y+20)
Ідея
• одна процедура малює і стирає
• стерти = намалювати кольором фону
• границю квадрата відключити (в
основній програмі)
малювати (True) або ні (False)?
малюємо: колір пензлика – жовтий
стираємо: колір пензлика – синій
тільки заливка!
Повна програма
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, 10, 400, 400);
Pen(0, 0, 0, 255);
x := 10; y := 200; stop := false;
repeat
if IsEvent then begin
...
end;
Draw(x, y, True);
Delay(10);
Draw(x, y, False);
x := x + 1;
if x >= 400-20 then stop := true;
until stop;
end.
процедура
початкова
умова
вихід по
клавіші Esc
вихід при
досягненні границі
синій фон
чекаємо 10 мс
відключити границю
"4": Два квадрати рухаються
в протилежних напрямках:
"5": Два квадрати рухаються
в протилежних напрямках
і відбиваються від стінок
синього квадрата:
Завдання
Керування клавішами
Задача: жовтий квадрат всередині синього квадрата керується
клавішами-стрілками. Коди клавіш:
вліво – 37 вверх – 38 Esc – 27
вправо – 39 вниз – 40
Проблема: як змінити напрям руху?
Розв’язання:
if {була подія} then begin
if {натиснута клавіша} then begin
{отримати код клавіші - code}
if code = 37 then x := x – 1;
if code = 38 then y := y – 1;
if code = 39 then x := x + 1;
if code = 40 then y := y + 1;
if code = 27 then stop := True;
end;
end;
IsEvent
Event ( k, code, i);
if k = 1 then begin
case code of
37: x := x – 1; 38: y := y – 1;
39: x := x + 1; 40: y := y + 1;
27: stop := True;
end;
якщо було
натиснуто на
клавішу, …
Програма
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
...
repeat
Draw(x, y, True);
Delay(20);
Draw(x, y, False);
until stop;
end.
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
if IsEvent then begin
...
end;
Що погано??
процедура
основний цикл
опрацювання
подій
Як забрати блимання?
Проблема: навіть якщо не натиснута жодна клавіша,
квадрат перемальовується через кожні 20 мс
(блимання!)
Що бажається: не перемальовувати квадрат, якщо
не було ніяких подій
Розв’язання: намалювати квадрат і чекати подію
Нова проблема: як чекати подію?
Розв’язання нової проблеми: пустий цикл "поки не
трапилася подія, нічого не робити":
while not IsEvent do;
Програма
program qq;
var x, y, k, code, i: integer;
stop: boolean;
begin
...
repeat
Draw(x, y, True);
while not IsEvent do;
until stop;
end.
procedure Draw(x,y: integer; flag: Boolean);
begin
...
end;
Draw(x, y, False);
Event(k, code, i);
...
while not IsEvent do;
процедура
малюємо квадрат
чекаємо подію
тільки тепер стираємо
Що можна покращити??
"4": Квадрат рухається при
натисненні стрілок, проте
не може вийти за границі
синього квадрата:
"5": Квадрат неперервно
рухається, при натисненні
стрілок міняє напрям і
відбивається від стінок
синього квадрата:
Завдання
Обертання
Задача: зобразити модель обертання Землі навколо
Сонця.
Проблема: рух по колу, як змінюються координати?
Розв’язання: використовувати в якості незалежної
змінної (змінювати в циклі) кут повороту α
(x0, y0)
α
L
(x, y)
x = x0 + L·cos(α)
y = y0 – L·sin(α)
Процедура
procedure Draw(x, y: integer; flag: boolean);
const r = 10;
begin
if flag then
Brush(1, 100, 100, 255)
else
Brush(1, 0, 0, 0);
Ellipse(x-r, y-r, x+r, y+r);
end;
малювати (True) або ні (False)?
малюємо: колір пензлика – голубий
стираємо: колір пензлика – чорний
тільки заливка!
радіус Землі
(x-r, y-r)
(x,y)
(x+r, y+r)
Константи і змінні
program qq;
const rSun = 60; { радіус Сонця}
L = 150; { радіус орбіти Землі }
x0 = 200; { координати центра Сонця}
y0 = 200;
var x, y, { координати Землі }
k, code, i: integer; { для Event }
a, ha: real; { кут повороту, крок }
stop: boolean; { признак зупинки програми }
begin
...
end.
procedure Draw(x, y: integer; flag: Boolean);
begin
...
end;
Основна програма
program qq;
...
begin
Brush(1, 0, 0, 0); Fill(1,1);
Brush(1, 255, 255, 0);
Ellipse(x0-rSun, y0-rSun, x0+rSun, y0+rSun);
a := 0; ha := 1*pi/180; { початковий кут, крок 1o за 100 мс}
stop := false;
Pen(0,0,0,0); { відключаємо контури }
repeat
x := round(x0 + L*cos(a));
y := round(y0 - L*sin(a));
Draw(x, y, True);
Delay(100);
Draw(x, y, False);
a := a + ha;
until stop;
end.
залити фон чорним
малюємо Сонце
нові координати
поворот на ha
чекаємо 100 мс
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then stop := true;
end;
"4": Зобразити модель Сонця
з двома планетами, які
обертаються в
протилежних напрямках:
"5": Зобразити модель
системи Сонце-Земля-
Місяць:
Завдання
Програмування на
мові Паскаль
Тема 12. Випадкові числа
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Випадкові числа
Випадкові події: всюди…
• підкидання монети (“герб" або “копійка")
• падіння снігу
• броунівський рух
• перешкоди при телефонному зв’язку
• шум радіоефіру
Випадкові числа – це така послідовність чисел, для якої
неможливо передбачити наступне число, якщо навіть
відомі попередні.
Проблема: як одержати на комп’ютері?
Можливі розв’язання:
• використовувати зовнішнє джерело шумових перешкод
• з допомогою математичних перетворень
Псевдовипадкові числа
Псевдовипадкові числа – це така послідовність чисел, яка має
властивості випадкових чисел, проте кожне наступне число
обчислюється по заданій формулі.
Приклади:
1. Випадкові цілі числа [0,m) (лінійний конгруентний метод)
2. Випадкові дійсні числа [0,1]
Література:
Д. Кнут, Мистецтво програмування для ЕОМ, т.2.
1073741823mod)1234516807( 1  nn xx
 k
nn xx )( 1
дробова частина числа
a, c, m – цілі числаmcxax nn mod)( 1  
просте число 230-1
наприклад, k = 5
Розподіл випадкових чисел
Модель: сніжинки падають на відрізок [a,b]
a b a b
розподіл
рівномірний нерівномірний
Скільки може бути різних розподілів ??
Розподіл випадкових чисел
Особливості:
• розподіл – це характеристика всієї послідовності, а не одного
числа
• рівномірний розподіл один, комп’ютерні датчики
(псевдо)випадкових чисел дають рівномірний розподіл
• нерівномірних – багато
• будь-яке нерівномірне можна отримати з допомогою
рівномірного
a b
2
21 xx
x


a b
12
1221 xxx
x



рівномірний розподіл
рівномірний розподіл
Генератор випадкових чисел в Паскалі
Цілі числа в інтервалі [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), 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), random(256));
Point(x, y );
if IsEvent then begin
Event(k, code, i);
if (k = 1) and (code = 27) then stop := True;
end;
until stop;
end.
випадкові координати
випадковий колір
вихід по клавіші Esc
"4": Ввести з клавіатури
координати кутів
прямокутника і заповнити
його точками випадкового
кольору.
"5": Заповнити трикутник
точками випадкового
кольору (рівномірно або
нерівномірно).
Підказка: візьміть
рівнобедрений трикутник з
кутом 45о.
Завдання
(100,100)
(300,200)
Програмування на
мові Паскаль
Тема 13. Функції
© К.Ю. Поляков, 2006-2007
Переклад: Н. Б. Мартинчук
Р. М. Васильчик
Функції
Функція – це допоміжний алгоритм (підпрограма),
результатом роботи якої є деяке значення.
Приклади:
• обчислення , ,
• розрахунок значення по складених формулах
• відповідь на запитання (просте число або ні?)
Для чого?
• для обчислення однакових розрахунків в різних
місцях програми
• для створення загальнодоступних бібліотек функцій
xsin xxcos
В чому відмінність від процедури??
Функції
Задача: скласти функцію, яка обчислює більше з
двох значень, і навести приклад її використання
Функція:
формальні параметри
function Max (a, b: integer): integer;
begin
if a > b then Max := a
else Max := b;
end. це результат
функції
Функції
Особливості:
• заголовок починається словом function
• формальні параметри описуються так само, як і для
процедур
• можна використовувати параметри-змінні
• в кінці заголовка через двокрапку вказується тип
результату
• функції розміщуються ВИЩЕ основної програми
Max (a, b: integer): integer;function
function Max (a, b: integer): ;integer
function qq( a, b: integer; x: real ): real;a, b: integer; x: real
function Max ( a, b: integer): integer;var
Функції
Особливості:
• можна оголошувати і використовувати локальні змінні
• значення, яке є результатом, записується в змінну, ім’я якої
співпадає з назвою функції; оголошувати НЕ ПОТРІБНО:
function Max (a, b: integer): integer;
begin
...
end;
Max := a;
function qq (a, b: integer): float;
begin
...
end;
var x, y: float;
В Delphi:! Result := a;
Програма
program qq;
var a, b, max: integer;
begin
writeln(‘Введіть два числа');
read(a, b);
max := Max ( a, b );
writeln(‘Найбільше число ', max );
end.
function Max (a, b: integer): integer;
begin
...
end;
c
c
c
Імена змінних, функцій і процедур
не повинні співпадати!
!
фактичні параметри
виклик функції
Логічні функції
Задача: скласти функцію, яка визначає, чи дійсно, що
задане число – просте.
Особливості:
• відповідь – логічне значення (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;
begin
writeln(‘Ввести ціле число');
read(N);
if Prime(N) then
writeln(N, ' – просте число')
else writeln(N, ' – складене число');
end.
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;
виклик функції
результат – логічне значення
перебір тільки до N
умова – це логічне значення
Завдання
"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)
Приклад:
Ввести кут в градусах:
45
sin(45) = 0.707

!7!5!3
sin
753
xxx
xx x в радіанах!

More Related Content

What's hot

програмування на мові паскаль
програмування на мові паскаль програмування на мові паскаль
програмування на мові паскаль Helen Pata
 
урок 12 вирази мова Паскаль
урок 12 вирази  мова Паскальурок 12 вирази  мова Паскаль
урок 12 вирази мова ПаскальHelen Pata
 
урок 17 поліваріантне розгалуження
урок 17 поліваріантне розгалуженняурок 17 поліваріантне розгалуження
урок 17 поліваріантне розгалуженняHelen Pata
 
урок 19 цикли Складання програм
урок 19 цикли Складання програмурок 19 цикли Складання програм
урок 19 цикли Складання програмHelen Pat
 
урок 15 умова паскаль
урок 15 умова паскальурок 15 умова паскаль
урок 15 умова паскальHelen Pat
 
урок 11 виведення значень мова Паскаль
урок 11 виведення значень мова Паскальурок 11 виведення значень мова Паскаль
урок 11 виведення значень мова ПаскальHelen Pata
 
First function
First functionFirst function
First functionAlex Moroz
 
09 Static Polymorphism
09 Static Polymorphism09 Static Polymorphism
09 Static Polymorphismolegapster
 
Konspekt uroky
Konspekt urokyKonspekt uroky
Konspekt urokyVasiliy66
 
05 Operations And Utilities
05 Operations And Utilities05 Operations And Utilities
05 Operations And Utilitiesolegapster
 
+3 проста математика
+3 проста математика+3 проста математика
+3 проста математикаОльга Рыбак
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt urokuVasiliy66
 

What's hot (20)

програмування на мові паскаль
програмування на мові паскаль програмування на мові паскаль
програмування на мові паскаль
 
Pascal основи програмування частина 2
Pascal основи програмування частина 2Pascal основи програмування частина 2
Pascal основи програмування частина 2
 
урок 12 вирази мова Паскаль
урок 12 вирази  мова Паскальурок 12 вирази  мова Паскаль
урок 12 вирази мова Паскаль
 
урок 17 поліваріантне розгалуження
урок 17 поліваріантне розгалуженняурок 17 поліваріантне розгалуження
урок 17 поліваріантне розгалуження
 
урок 19 цикли Складання програм
урок 19 цикли Складання програмурок 19 цикли Складання програм
урок 19 цикли Складання програм
 
урок 15 умова паскаль
урок 15 умова паскальурок 15 умова паскаль
урок 15 умова паскаль
 
урок 11 виведення значень мова Паскаль
урок 11 виведення значень мова Паскальурок 11 виведення значень мова Паскаль
урок 11 виведення значень мова Паскаль
 
Funkciji1
Funkciji1Funkciji1
Funkciji1
 
+6 for
+6 for+6 for
+6 for
 
First function
First functionFirst function
First function
 
Povtor 7 8kl
Povtor 7 8klPovtor 7 8kl
Povtor 7 8kl
 
JavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basisJavaScript. Lectures. part 1. basis
JavaScript. Lectures. part 1. basis
 
Coding for Future in Lutsk. JavaScript. Part 6
Coding for Future in Lutsk. JavaScript. Part 6Coding for Future in Lutsk. JavaScript. Part 6
Coding for Future in Lutsk. JavaScript. Part 6
 
+5 розгал в с++
+5 розгал в с+++5 розгал в с++
+5 розгал в с++
 
09 Static Polymorphism
09 Static Polymorphism09 Static Polymorphism
09 Static Polymorphism
 
08 Functions
08 Functions08 Functions
08 Functions
 
Konspekt uroky
Konspekt urokyKonspekt uroky
Konspekt uroky
 
05 Operations And Utilities
05 Operations And Utilities05 Operations And Utilities
05 Operations And Utilities
 
+3 проста математика
+3 проста математика+3 проста математика
+3 проста математика
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt uroku
 

Similar to Pascal osnovu

програмування мовою паскаль функції
програмування мовою паскаль функціїпрограмування мовою паскаль функції
програмування мовою паскаль функціїOlga Lyulchik
 
програмування
програмуванняпрограмування
програмуванняOlga Lyulchik
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt urokuVasiliy66
 
Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++Alexander Kuzmenko
 
програмування1
програмування1програмування1
програмування1Olga Lyulchik
 
Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Dmitry Chabanenko
 
Учень, як вчений
Учень, як вченийУчень, як вчений
Учень, як вченийCveldulf
 
підпрограми (процедури і функції) 7
підпрограми (процедури і функції) 7підпрограми (процедури і функції) 7
підпрограми (процедури і функції) 7zero1996
 
7 клас 12 урок. Алгоритми з розгалуженнями
7 клас 12 урок. Алгоритми з розгалуженнями7 клас 12 урок. Алгоритми з розгалуженнями
7 клас 12 урок. Алгоритми з розгалуженнямиStAlKeRoV
 
Завдання олімпіади
Завдання олімпіадиЗавдання олімпіади
Завдання олімпіадиoksana oksana
 
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листкуінформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листкуШкола №7 Миргород
 
Mka python jr-urok_05_ua_1563258882
Mka python jr-urok_05_ua_1563258882Mka python jr-urok_05_ua_1563258882
Mka python jr-urok_05_ua_1563258882PavloTsiura
 
тема 7
тема 7тема 7
тема 7cit-cit
 

Similar to Pascal osnovu (20)

програмування мовою паскаль функції
програмування мовою паскаль функціїпрограмування мовою паскаль функції
програмування мовою паскаль функції
 
програмування
програмуванняпрограмування
програмування
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt uroku
 
Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++
 
програмування1
програмування1програмування1
програмування1
 
Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1
 
Учень, як вчений
Учень, як вченийУчень, як вчений
Учень, як вчений
 
оператори розгалуження
оператори розгалуженняоператори розгалуження
оператори розгалуження
 
базовI структури алгоритму урок 4
базовI структури алгоритму урок 4базовI структури алгоритму урок 4
базовI структури алгоритму урок 4
 
підпрограми (процедури і функції) 7
підпрограми (процедури і функції) 7підпрограми (процедури і функції) 7
підпрограми (процедури і функції) 7
 
7 клас 12 урок. Алгоритми з розгалуженнями
7 клас 12 урок. Алгоритми з розгалуженнями7 клас 12 урок. Алгоритми з розгалуженнями
7 клас 12 урок. Алгоритми з розгалуженнями
 
Завдання олімпіади
Завдання олімпіадиЗавдання олімпіади
Завдання олімпіади
 
5971 789623
5971 7896235971 789623
5971 789623
 
Operator prisvoy
Operator prisvoyOperator prisvoy
Operator prisvoy
 
Урок 38. Алгоритми з розгалуженням
Урок 38. Алгоритми з розгалуженнямУрок 38. Алгоритми з розгалуженням
Урок 38. Алгоритми з розгалуженням
 
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листкуінформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
 
алгоритм урок 3
алгоритм урок 3алгоритм урок 3
алгоритм урок 3
 
Mka python jr-urok_05_ua_1563258882
Mka python jr-urok_05_ua_1563258882Mka python jr-urok_05_ua_1563258882
Mka python jr-urok_05_ua_1563258882
 
7 klas 11_urok_m
7 klas 11_urok_m7 klas 11_urok_m
7 klas 11_urok_m
 
тема 7
тема 7тема 7
тема 7
 

More from Escuela

Фізика - ЗНО 2020 (пробне)
Фізика - ЗНО 2020 (пробне)Фізика - ЗНО 2020 (пробне)
Фізика - ЗНО 2020 (пробне)Escuela
 
Рух тіла під дією кількох сил
Рух тіла під дією кількох сил Рух тіла під дією кількох сил
Рух тіла під дією кількох сил Escuela
 
пIсок давно минувших днiв
пIсок давно минувших днiвпIсок давно минувших днiв
пIсок давно минувших днiвEscuela
 
майбутні цифрові технології
майбутні цифрові технологіїмайбутні цифрові технології
майбутні цифрові технологіїEscuela
 
ЗНО-2016
ЗНО-2016ЗНО-2016
ЗНО-2016Escuela
 
системи числення
системи численнясистеми числення
системи численняEscuela
 
Iнтернет
IнтернетIнтернет
IнтернетEscuela
 
Comp net
Comp netComp net
Comp netEscuela
 
Information
InformationInformation
InformationEscuela
 
Pascal osnovu2
Pascal osnovu2Pascal osnovu2
Pascal osnovu2Escuela
 
Kod infor
Kod inforKod infor
Kod inforEscuela
 
Gcompris
GcomprisGcompris
GcomprisEscuela
 
Power Point 2007
Power Point 2007Power Point 2007
Power Point 2007Escuela
 
бази даних
бази данихбази даних
бази данихEscuela
 
Світло і звук
Світло і звукСвітло і звук
Світло і звукEscuela
 

More from Escuela (20)

Фізика - ЗНО 2020 (пробне)
Фізика - ЗНО 2020 (пробне)Фізика - ЗНО 2020 (пробне)
Фізика - ЗНО 2020 (пробне)
 
Рух тіла під дією кількох сил
Рух тіла під дією кількох сил Рух тіла під дією кількох сил
Рух тіла під дією кількох сил
 
пIсок давно минувших днiв
пIсок давно минувших днiвпIсок давно минувших днiв
пIсок давно минувших днiв
 
майбутні цифрові технології
майбутні цифрові технологіїмайбутні цифрові технології
майбутні цифрові технології
 
ЗНО-2016
ЗНО-2016ЗНО-2016
ЗНО-2016
 
системи числення
системи численнясистеми числення
системи числення
 
Files
FilesFiles
Files
 
Iнтернет
IнтернетIнтернет
Iнтернет
 
Excel
ExcelExcel
Excel
 
Comp net
Comp netComp net
Comp net
 
Information
InformationInformation
Information
 
Pascal osnovu2
Pascal osnovu2Pascal osnovu2
Pascal osnovu2
 
Lytva
LytvaLytva
Lytva
 
Kod infor
Kod inforKod infor
Kod infor
 
Gcompris
GcomprisGcompris
Gcompris
 
Web 2 0
Web 2 0Web 2 0
Web 2 0
 
Power Point 2007
Power Point 2007Power Point 2007
Power Point 2007
 
MKT
MKTMKT
MKT
 
бази даних
бази данихбази даних
бази даних
 
Світло і звук
Світло і звукСвітло і звук
Світло і звук
 

Recently uploaded

Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»tetiana1958
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxvitalina6709
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfssuser54595a
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяAdriana Himinets
 

Recently uploaded (6)

Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptx
 
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdfupd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
upd.18-04-UA_REPORT_MEDIALITERAСY_INDEX-DM_23_FINAL.pdf
 
Її величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptxЇї величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptx
 
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
 
О.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. БіографіяО.Духнович - пророк народної правди. Біографія
О.Духнович - пророк народної правди. Біографія
 

Pascal osnovu

  • 1. Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 2. Алгоритм Властивості алгоритму • дискретність: складається з окремих кроків (команд) • зрозумілість: повинен включати тільки команди відомі для виконавця (які містяться в СКВ) • визначеність: при однакових вхідних даних завжди видає один і той самий результат • скінченність: закінчується за скінчену кількість кроків • масовість: може застосовуватися багатократно при різних вихідних даних • коректність: видає правильне рішення при будь- яких допустимих вихідних даних Алгоритм – це чітко визначений план дій для виконавця.
  • 3. Програма Програма – це • алгоритм, записаний на будь-якій мові програмування • набір команд для комп’ютера Команда – це опис дій, які повинен виконати комп’ютер. • звідки отримати вихідні дані? • що потрібно з ними зробити?
  • 4. Мови програмування • Машинно-орієнтовані (низького рівня) – кожна команда відповідає одній команді процесора (асемблер) • Мови високого рівня – наближені до реальної (англійської) мови, легше сприймаються людиною, не залежать від відповідного комп’ютера • для навчання: Бейсик, ЛОГО, Паскаль • професійні: Сі, Фортран, Паскаль • для задач штучного інтелекту: Пролог, ЛИСП • для Інтернету: JavaScript, Java, Perl, PHP, ASP
  • 5. Мова Паскаль 1970 – Ніклаус Вірт (Швейцарія) • мова для навчання студентів • розробка програм “зверху-вниз” • різноманітні структури даних (масиви, структури, множини) Підзадача1 Підзадача2 Підзадача3 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3 Задача
  • 6. З чого складається програма? program <ім’я програми>; const …;{константи} var …; {змінні} begin … {основна програма} end. { процедури і функції } коментарі у фігурних дужках не опрацьовуються
  • 7. З чого складається програма? Константа – постійна величина, яка має ім’я. Змінна – змінна величина, яка має ім’я (комірка пам’яті). Процедура – додатковий алгоритм, який описує деякі дії (малювання кола). Функція – додатковий алгоритм, для виконання обчислень (обчислення квадратного кореня, sin).
  • 8. Імена програм, констант, змінних Імена можуть містити • латинські букви (A-Z) • цифри • знак підкреслення _ великі і маленькі букви не розрізняються Імена НЕ можуть містити • українські букви • пропуски • дужки, знаки +, =, !, ? та ін. ім’я не може починатися з цифри Які імена правильні? AXby R&B 4Wheel Вася “PesBarbos” TU154 [QuQu] _ABBA A+B
  • 9. Константи const i2 = 45; { ціле число } pi = 3.14; { дійсне число } qq = 'Вася'; { рядок символів } L = True; { логічна величина } ціла і дробова частина відділяються крапкою можна використовувати українські букви! Може приймати два значення: • True (істина, “так") • False (хибність, "ні")
  • 10. Змінні Змінна – це величина, яка має ім’я, тип і значення. Значення змінної величини під час виконання програми може змінюватися. Типи змінних: • integer { цілі } • real { дійсні } • char { один символ } • string { рядок } • boolean { логічні } Оголошення змінних (виділення пам’яті): var a, b: integer; Q: real; s1, s2: string;
  • 11. Як змінюється значення змінної? Оператор – це команда мови програмування високого рівня. Оператор присвоєння служить для зміни значення змінної. Приклад: program qq; var a, b: integer; begin a := 5; b := a + 2; a := (a + 2)*(b – 3); end. a ? 55 b ? 5+27 a 5 7*428
  • 12. Оператор присвоєння Загальна структура: <ім’я змінної> := <вираз>; Арифметичні вирази можуть містити • константи • імена змінних • знаки арифметичних дій: + - * / div mod • виклики функцій • круглі дужки ( ) множення ділення ділення націло остача від ділення
  • 13. 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. Які оператори неправильні? ім’я змінної повинно знаходитися зліва від знака := ціла і дробова частина відділяються крапкою неможливо записати дійсне значення в цілу змінну
  • 14. Ручна прокрутка програми 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
  • 15. Порядок виконання операцій • обчислення виразів у дужках • множення, ділення, div, mod зліва направо • додаванні і віднімання зліва направо 2 3 5 4 1 7 8 6 9 z := (5*a*c+3*(c-d))/a*(b-c)/ b; )2)(( )(5 22 addc badca x    )( )(35 cb ab dcac z    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));
  • 16. Додавання двох чисел Задача. Ввести два цілих числа і вивести на екран їх суму. Найпростіше розв’язання: program qq; var a, b, c: integer; begin read ( a, b ); c := a + b; writeln ( c ); end.
  • 17. Оператор введення read ( a ); { ввести значення змінної a} read ( a, b ); { ввести значення змінних a і b} Як вводяться два числа? через пропуск: 25 30 через Enter: 25 30 a25 b30 a25 b30
  • 18. Оператор виведення write ( a ); { вивести значення змінної a} writeln ( a ); { вивести значення змінної a і перейти на новий рядок} writeln ( ‘Привіт!' ); { виведення тексту} writeln ( ‘Відповідь: ', c ); {виведення тексту і значення змінної c} writeln ( a, '+', b, '=', c );
  • 19. Формати виведення 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< > 15< >1.234568E+001< > 1.23E+001< > 12.35< всього символів всього символів в дробовій частині
  • 20. Повний розв’язок 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 це виводить комп'ютер це вводить користувач
  • 21. Блок-схема лінійного алгоритму початок кінець c := a + b; ввести a, b вивести c блок «початок» блок «ввести» блок «процес» блок «вивести» блок «кінець»
  • 22. Завдання "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
  • 23. Програмування на мові Паскаль Тема 2. Розгалуження © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 24. Алгоритми розгалуження Задача. Ввести два цілих числа і вивести на екран більше з них. Ідея розв’язання: потрібно вивести на екран перше число, якщо воно більше другого, або друге, якщо воно більше першого. Особливості: дії виконавця залежать від деяких умов (якщо … інакше …). Алгоритми, в яких послідовність кроків залежить від виконання деяких умов, називаються розгалуженими.
  • 25. Варіант 1. Блок-схема початок max:= a; ввести a,b вивести max a > b? max:= b; кінець так ні повна форма розгалуження блок «логічний вираз» Якщо a = b??
  • 26. Варіант 1. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); if a > b then begin end else begin end; writeln (‘Більше число ', max); end. max := a; max := b; повна форма умовного оператора
  • 27. Умовний оператор if <умова> then begin {що робити, якщо умова правильна} end else begin {що робити, якщо умова неправильна} end; Особливості: • перед else НЕ ставиться крапка з комою • друга частина (else …) може бути відсутня (неповна форма) • якщо в блоці один оператор, можна забрати слова begin і end
  • 28. Що неправильно? if a > b then begin a := b; end else b := a; end; if a > b then begin a := b; else begin b := a; end; if a > b then begin a := b; end; else begin b := a; end; if a > b then begin a := b; end else b > a begin b := a; end; begin end begin end
  • 29. Варіант 2. Блок-схема неповна форма розгалуження початок max:= a; ввести a,b вивести max max:= b; кінець так ні b > a?
  • 30. Варіант 2. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); max := a; if b > a then writeln (‘Більше число ', max); end. max := b; неповна форма умовного оператора
  • 31. Варіант 2Б. Програма program qq; var a, b, max: integer; begin writeln(‘Ввести два цілих числа'); read ( a, b ); max := b; if ??? then ??? writeln (‘Більше число ', max); end. max := a; a > b
  • 32. Що неправильно? if a > b then begin a := b; else b := a; if a > b then begin a := b; end; else b := a; if a > b then else begin b := a; end; if a > b then a := b; else b := a; end; a := b end a := b if b >= a then b := a;
  • 33. Завдання "4": Ввести три числа і знайти найбільше з них. Приклад: Ввести три числа: 4 15 9 Найбільше число 15 "5": Ввести п’ять чисел і знайти найбільше з них. Приклад: Ввести п’ять чисел: 4 15 9 56 4 Найбільше число 56
  • 34. Програмування на мові Паскаль Тема 3. Складені умови © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 35. Складені умови Задача. Фірма набирає співробітників від 25 до 40 років включно. Ввести вік людини і визначити, чи підходить вона фірмі (вивести відповідь “підходить” або “не підходить”). Особливості: потрібно перевірити, виконання двох умов одночасно. Чи можна розв’язати відомими методами??
  • 36. Варіант 1. Алгоритм початок ввести x ‘підходить' кінець так ні x >= 25? так ні x <= 40? ‘не підходить' ‘не підходить'
  • 37. Варіант 1. Програма program qq; var x: integer; begin writeln(‘Ввести вік'); read ( x ); if x >= 25 then if x <= 40 then writeln (‘Підходить') else writeln (‘Не підходить') else writeln (‘Не підходить'); end.
  • 38. Варіант 2. Алгоритм початок ввести x ‘підходить' так ніx >= 25 і x <= 40? ‘не підходить' кінець
  • 39. Варіант 2. Програма program qq; var x: integer; begin writeln(‘Ввести вік'); read ( x ); if (x >= 25) and (x <= 40) then writeln (‘Підходить') else writeln (‘Не підходить') end. складена умова
  • 40. Складена умова Складена умова – це умова, яка складається з декількох простих умов (відношень), зв’язаних з допомогою логічних операцій: • not – НІ (заперечення, інверсія) • and – І (логічне множення, кон'юнкція, одночасне виконання умов) • or – АБО (логічне додавання, диз'юнкція, виконання хоча б одної з умов) • xor – виключаюче АБО (виконання тільки одної з двох умов, але не обох) Прості умови (відношення) < <= > >= = <> дорівнює не дорівнює
  • 41. Складена умова Порядок виконання • вирази в дужках • not • and • or, xor • <, <=, >, >=, =, <> Особливості – кожна з простих умов обов'язково береться в дужки. Приклад 4 1 6 2 5 3 if not (a > b) or (c <> d) and (b <> a) then begin ... end
  • 42. Істинне чи хибне при a := 2; b := 3; c := 4; not (a > b) (a < b) and (b < c) not (a >= b) or (c = d) (a < c) or (b < c) and (b < a) (a < b) xor not (b > c) Для яких значень x істинні умови: (x < 6) and (x < 10) (x < 6) and (x > 10) (x > 6) and (x < 10) (x > 6) and (x > 10) (x < 6) or (x < 10) (x < 6) or (x > 10) (x > 6) or (x < 10) (x > 6) or (x > 10) Складена умова True True FALSE (-, 6)  (6, 10) (10, ) (-, 10) (-, 6)  (10,) (-, ) (6, ) x < 6 x > 10 x < 10 x > 6 True True
  • 43. Завдання "4": Ввести номер місяця і вивести назву пори року. Приклад: Ввести номер місяця: 4 весна "5": Ввести вік людини (від 1 до 150 років) и вивести його разом з наступним слово “рік”, “роки" або “років". Приклад: Ввести вік: Ввести вік: 24 57 Вам 24 роки Вам 57 років
  • 44. Програмування на мові Паскаль Тема 4. Цикли © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 45. Цикли Цикл – це багатократне виконання однакової послідовності дій. • цикл з відомою кількістю кроків • цикл з невідомою кількістю кроків (цикл з умовою) Задача. Вивести на екран квадрати і куби цілих чисел від 1 до 8 (від a до b). Особливості: однакові дії виконуються 8 раз. Чи можна розв’язати відомими методами??
  • 46. Алгоритм початок i, i2, i3 кінець ні так i <= 8? i := 1; i := i + 1; i2 := i * i; i3 := i2 * i; задати початкове значення змінної циклу перевірити, чи все виконали обчислити квадрат і куб вивести результат перейти до наступного i
  • 47. Алгоритм (з блоком "цикл") початок i, i2, i3 кінець i2 := i * i; i3 := i2 * i; i := 1,8 блок "цикл" тіло циклу
  • 48. Програма program qq; var i, i2, i3: integer; begin for i:=1 to 8 do begin i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end; end. змінна циклу початкове значення кінцеве значення
  • 49. Цикл з зменшенням змінної Задача. Вивести на екран квадрати і куби цілих чисел від 8 до 1 (в зворотному порядку). Особливості: змінна циклу повинна зменшуватися. Розв’язання: ... for i:=8 1 do begin i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end; ... downto
  • 50. Цикл з змінною for <змінна> := <початкове значення> to <кінцеве значення> do begin {тіло циклу} end; Збільшення змінної на 1: for <змінна> := <початкове значення> downto <кінцеве значення> do begin {тіло циклу} end; Зменшення змінної на 1:
  • 51. Цикл з змінною Особливості: • змінна повинна бути тільки цілою (integer) • крок зміни змінної циклу завжди рівний 1 (to) або -1 (downto) • якщо в тілі циклу тільки один оператор, слова begin і end можна не писати: • якщо кінцеве значення менше початкового, цикл (to) не виконується ні разу (перевірка умови в початку циклу, цикл з передумовою) for i:=1 to 8 do writeln(‘Привіт');
  • 52. Цикл з змінною Особливості: • в тілі циклу не дозволяється змінювати змінну циклу (чому?) • при зміні початкового і кінцевого значення всередині циклу кількість кроків не змінюється: n := 8; for i:=1 to n do begin writeln('Привіт'); n := n + 1; end; немає зациклювання
  • 53. Цикл з змінною Особливості: • після виконання циклу в багатьох системах встановлюється перше значення змінної циклу, при якому порушується умова: for i:=1 to 8 do writeln('Привіт'); writeln('i=', i); for i:=8 downto 1 do writeln('Привіт'); writeln('i=', i); i=9 i=0
  • 54. Скільки разів виконається цикл? 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
  • 55. Як змінюється крок? Задача. Вивести на екран квадрати і куби непарних цілих чисел від 1 до 9. Особливості: змінна циклу повинна збільшуватися на 2. Проблема: в Паскалі крок може бути 1 або -1. Розв’язання: ... for i:=1 to 9 do begin if ??? then begin i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end; end; ... i mod 2 = 1 виконується тільки для непарних i Що погано??
  • 56. Як змінюється крок? – II Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється від 1 до 5. Початкове значення i дорівнює 1, з кожним кроком циклу i збільшується на 2. Розв’язання: ... ??? for k:=1 to 5 do begin i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); ??? end; ... i := i + 2; i := 1;
  • 57. Як змінюється крок? – III Ідея: Потрібно вивести всього 5 чисел, змінна k змінюється від 1 до 5. Знаючи k, потрібно розрахувати i. Розв’язання: ... for k:=1 to 5 do begin ??? i2 := i*i; i3 := i2*i; writeln(i:4, i2:4, i3:4); end; ... i := 2*k – 1; k 1 2 3 4 5 i 1 3 5 7 9 i = 2k-1
  • 58. Завдання "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
  • 59. Програмування на мові Паскаль Тема 5. Цикли з умовою © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 60. Цикл з невідомою кількістю кроків Приклад: Відрізати поліно від бревна. Скільки разів потрібно зробити рух пилкою? Задача: Ввести ціле число (<2000000) і визначити кількість цифр у ньому. Ідея розв’язання: Відрізаємо послідовно останню цифру, збільшуємо лічильник. Проблема: Невідомо, скільки кроків потрібно зробити. Розв’язання: Потрібно зупинитися, коли n = 0, тобто потрібно робити “поки n <> 0". n count 123 0 12 1 1 2 0 3
  • 61. Алгоритм початок count кінець ні так n <> 0? count := 0; count := count + 1; n := n div 10; обнулити лічильник цифр ввести n виконувати "поки n <> 0"
  • 62. Програма program qq; var n, count: integer; begin writeln(‘Ввести ціле число'); read(n); count := 0; while n <> 0 do begin count := count + 1; n := n div 10; end; writeln('В числі ', n, ' знайшли ', count, ' цифр'); end. , n1: integer; n1 := n; n1, виконувати "поки n <> 0" Що погано??
  • 63. Цикл с умовою while <умова> do begin {тіло циклу} end; Особливості: • можна використовувати складені умови: • якщо в тілі циклу тільки один оператор, слова begin і end можна не писати: while (a<b) and (b<c) do begin {тіло циклу} end; while a < b do a := a + 1;
  • 64. Цикл з умовою Особливості: • умова перевіряється кожен раз при вході в цикл • якщо умова на вході в цикл хибна, цикл не виконується жодного разу • якщо умова ніколи не стане хибною, програма зациклиться a := 4; b := 6; while a > b do a := a – b; a := 4; b := 6; while a < b do d := a + b;
  • 65. Скільки разів виконується цикл? 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; зациклювання
  • 66. Заміна for на while і навпаки for i:=1 to 10 do begin {тіло циклу} end; i := 1; while i <= 10 do begin {тіло циклу} i := i + 1; end; for i:=a downto b do begin {тіло циклу} end; i := a; while i >= b do begin {тіло циклу} i := i - 1; end; Заміна while на for можлива тільки тоді, коли можна наперед розрахувати кількість кроків циклу. Заміна циклу for на while можлива завжди.
  • 67. Завдання "4": Ввести ціле число і знайти суму його цифр. Приклад: Ввести ціле число: 1234 Сума цифр числа 1234 рівна 10. "5": Ввести ціле число і визначити, чи правда, що в його записі є дві однакові цифри. Приклад: Ввести ціле число: Ввести ціле число: 1234 1224 Ні. Так.
  • 68. Послідовності Приклади: • 1, 2, 3, 4, 5, … • 1, 2, 4, 7, 11, 16, … • 1, 2, 4, 8, 16, 32, … • ..., 32 5 , 4 1 , 8 3 , 2 1 , 2 1 ..., 32 5 , 16 4 , 8 3 , 4 2 , 2 1 an = n a1 = 1, an+1 = an+1 a1 = 1, an+1 = an + n an = 2n-1 a1 = 1, an+1 = 2an b1 = 1, bn+1 = bn+1 c1 = 2, cn+1 = 2cnn n n c b a 
  • 69. Послідовності Задача: знайти суму всіх елементів послідовності, які по модулю більші 0,001: ..., 32 5 , 16 4 , 8 3 , 4 2 , 2 1 ,1  ... 32 5 16 4 8 3 4 2 2 1 1 S Елемент послідовності (починаючи з №2): c b za  n 1 2 3 4 5 ... b 1 2 3 4 5 ... c 2 4 8 16 32 ... z -1 1 -1 1 -1 ... b := b+1; c := 2*c; z := -z;
  • 70. Алгоритм початок S кінець ні так |a| > 0.001? S := S + a; S := 0; b := 1; c := 2; z := -1; a := 1; початкове значення a := z*b/c; b := b + 1; c := 2*c; z := -z; перший елемент новий елемент зміни Перестановка??
  • 71. Програма 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. перехід до наступного доданка початкове значення збільшення суми розрахунок елемента послідовності
  • 72. Завдання "4": Знайти суму елементів послідовності з точністю 0,001: Відповідь: S = 1.157 "5": Знайти суму елементів послідовності з точністю 0,001: Відповідь: S = 1.220 ... 819 8 277 6 95 4 33 2 1         S ... 24313 10 818 8 275 6 93 4 32 2 1           S
  • 73. Цикл з післяумовою Задача: Ввести ціле додатне число (<2000000) і визначити кількість цифр в ньому. Проблема: Як не дати ввести від'ємне число або нуль? Розв’язання: Якщо вводиться неправильне число, повернутися назад до введення даних (цикл!). Особливості: Один раз тіло циклу потрібно виконати в будь-якому випадку => перевірку умови циклу потрібно виконувати в кінці циклу (цикл с післяумовою). Цикл с післяумовою – це цикл, в якому перевірка умови виконується в кінці циклу.
  • 74. Цикл з післяумовою: алгоритм початок кінець так ні n > 0? тіло циклу умова ВИХОДУ блок "типовий процес" ввести n основний алгоритм
  • 75. Програма program qq; var n: integer; begin repeat writeln(‘Ввести додатне число'); read(n); until n > 0; ... { основний алгоритм } end. until n > 0; умова ВИХОДУ Особливості: • тіло циклу завжди виконується хоча б один раз • після слова until ("до тих пір, поки не…") ставиться умова ВИХОДУ із циклу
  • 76. Скільки разів виконується цикл? 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; зациклення
  • 77. Завдання (з захистом від неправильного введення) "4": Ввести натуральне число і визначити, чи правда що сума його цифр дорівнює 10. Приклад: Ввести число >= 0: Введіть число >= 0: -234 1233 Потрібно додатне число. Ні Ввести число >= 0: 1234 Так "5": Ввести натуральне число і визначити, які цифри зустрічаються декілька разів. Приклад: Введіть число >= 0: Введіть число >= 0: 2323 1234 Повторяються: 2, 3 Немає повторів.
  • 78. Програмування на мові Паскаль Тема 6. Оператор вибору © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 79. Оператор вибору Задача: Ввести номер місяця і вивести кількість днів в цьому місяці. Розв’язання: Кількість днів у місяцях: 28 днів – 2 (лютий) 30 днів – 4 (квітень), 6 (червень), 9 (вересень), 11 (листопад) 31 день – 1 (січень), 3 (березень), 5 (травень), 7 (липень), 8 (серпень), 10 (жовтень), 12 (грудень) Особливості: Вибір не з двох, а з декількох варіантів в залежності від номера місяця. Чи можна розв’язати відомими методами??
  • 80. Алгоритм початок кінець оператор вибору жоден з варіантів не підійшов ввести M так ні M = 1? D := 31; ні M = 2? D := 28; так ні M = 12? D := 31; так вивести D помилка
  • 81. Програма 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. жоден варіант не підійшов
  • 82. Оператор вибору Особливості: • після case може бути ім’я змінної або арифметичний вираз цілого типу (integer) або символьного типа (char) case i+3 of 1: begin a := b; end; 2: begin a := c; end; end; var c: char; ... case c of 'а': writeln('Антилопа'); 'б': writeln('Борсук'); else writeln('Не знаю'); end;
  • 83. Оператор вибору Особливості: • якщо потрібно виконати тільки один оператор, слова begin і end можна не писати • не можна ставити два однакових значення case i+3 of 1: a := b; 1: a := c; end; case i+3 of 1: a := b; 2: a := c; end;
  • 84. Оператор вибору Особливості: • значення, при яких виконуються однакові дії, можна групувати case i of 1: a := b; 2,4,6: a := c; 10..15: a := d; 20,21,25..30: a := e; else writeln(‘Помилка'); end; перечислення діапазон суміш
  • 85. Що неправильно? 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; end; 3..6: case a+c/2 of 2: a := b; 4: a := c; end; case a of 2: a := b; d := 0; 4: a := c; end; begin end;
  • 86. Завдання (з захистом від неправильного введення) "4": Ввести номер місяця і вивести кількість днів в ньому, а також кількість помилок при введенні. Приклад: Введіть номер місяця: Введіть номер місяця: -2 2 Введіть номер місяця: В цьому місяці 28 днів. 11 Ви вводили неправильно 0 раз. В цьому місяці 30 днів. Ви вводили неправильно 1 раз. "5": Ввести номер місяця і номер дня, вивести кількість днів, які залишилися до Нового року. Приклад: Ввести номер місяця: 12 Ввести день: 25 До Нового року залишилося 6 днів.
  • 87. Програмування на мові Паскаль Тема 7. Графіка © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 89. Керування кольором Колір і товщина ліній, колір точок: Pen ( 1, 255, 0, 0 ); Колір і стиль заливки: Brush ( 1, 0, 255, 0 ); Колір тексту: TextColor ( 0, 0, 255 ); товщина лінії R(red) 0..255 G(green) 0..255 B(blue) 0..255 0 – виключити 1 – включити R G B R G B
  • 90. Точки, відрізки і ламані (x1, y1) (x2, y2) Pen (1, 0, 255, 0); Line (x1, y1, x2, y2); (x, y) Pen (1, 0, 0, 255); Point (x, y); (x1, y1) (x2, y2) (x3, y3) (x4, y4) (x5, y5) Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5);
  • 91. Фігури з заливкою (x1, y1) (x2, y2) Pen (1, 0, 0, 255); Brush (1, 255, 255, 0); Rectangle (x1, y1, x2, y2); (x1, y1) (x2, y2) Pen (1, 255, 0, 0); Brush (1, 0, 255, 0); Ellipse (x1, y1, x2, y2); Brush (1, 100, 200, 255); Fill (x, y); (x, y) Як відмінити заливку??
  • 92. Текст TextColor (0, 0, 255); Brush (1, 255, 255, 0); Font (20, 30, 600); MoveTo (x, y); writeln ('Привіт!'); (x, y) розмір 10 пікселів кут повороту насиченість: 400 – нормальний 600 – жирний 30о
  • 93. Приклад (200, 50) (100, 100) (300, 200) program qq; begin Pen(2, 255, 0, 255); Brush(1, 0, 0, 255); Rectangle(100, 100, 300, 200); MoveTo(100, 100); LineTo(200, 50); LineTo(300, 100); Brush(1, 255, 255, 0); Fill(200, 75); Pen(2, 255, 255, 255); Brush(1, 0, 255, 0); Ellipse(150, 100, 250, 200); end.
  • 95. Штриховка (x1, y1) (x2, y2) N ліній (N=5) h 1 12    N xx h Rectangle (x1, y1, x2, y2); Line( x1+h, y1, x1+h, y2); Line( x1+2*h, y1, x1+2*h, y2); Line( x1+3*h, y1, x1+3*h, y2); ... h := (x2 – x1) / (N + 1); Rectangle (x1, y1, x2, y2); x := x1 + h; for i:=1 to N do begin Line( round(x), y1, round(x), y2); x := x + h; end; var x, h: real; x заокруглення до найближчого цілого x
  • 96. Як міняти колір? (x1, y1) (x2, y2) Brush ( 1, c, c, c ); Fill ( ???, ??? ); сірий: R = G = B Крок зміни c: 1 255   N hc x (x-1, y1+1) var c, hc: integer; hc := 255 div (N + 1); c := 0; for i:=1 to N+1 do begin Line (round(x), y1, round(x), y2); Brush (1, c, c, c); Fill (round(x)-1, y1+1); x := x + h; c := c + hc; end;
  • 97. Штриховка (x1, y1) (x2, y2) (x3, y2) a h 1 23    N xx h12 xxa (x3+a, y1) Line( x1+h, y1, x1+h-a, y2); Line( x1+2*h, y1, x1+2*h-a, y2); Line( x1+3*h, y1, x1+3*h-a, y2); ... h := (x3 – x2) / (N + 1); a := x2 – x1; x := x1 + h; for i:=1 to N do begin Line( round(x), y1, round(x-a), y2); x := x + h; end; x x-a
  • 98. Штриховка (x1, y1) (x2, y2) hx hy y x y Line( x1, y1+hy, x1+hx, y1+hy) ; Line( x1, y1+2*hy, x1+2*hx, y1+2*hy); Line( x1, y1+3*hy, x1+3*hx, y1+3*hy); ... 1 12    N xx hx 1 12    N yy hy hx := (x2 – x1) / (N + 1); hy := (y2 – y1) / (N + 1); x := x1 + hx; y := y1 + hy; for i:=1 to N do begin Line( x1, round(y), round(x), round(y)); x := x + hx; y := y + hy; end;
  • 99. Завдання "4": Ввести з клавіатури кількість ліній штриховки і побудувати фігуру, заливши всі області різним кольором. "5": Ввести з клавіатури кількість кіл і побудувати фігуру, заливши всі області різними кольорами.
  • 100. Програмування на мові Паскаль Тема 8. Графіки функцій © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 101. Побудова графіків функцій Задача: побудувати графік функції y = 3 sin(x) на інтервалі від 0 до 2π. Аналіз: максимальне значення ymax = 3 при x = π/2 мінімальне значення ymin = -3 при x = 3π/2 Проблема: функція задана в математичній системі координат, будувати потрібно на екрані, вказуючи координати в пікселях.
  • 102. Перетворення координат (x,y) X Y x y Математична система координат Екранна система координат (пікселі) (xе,yе) xе yе (0,0) (0,0) a b k – масштаб (довжина зображення одиничного відрізка на екрані) xе = a + kx yе = b - ky
  • 103. Програма 2π h – крок зміни x w – довжина осі ОХ в пікселях на екрані осі координат цикл побудови графіка program qq; const a = 50; b = 200; k = 50; xmin = 0; xmax = 6.2832; var x, y, h: real; xe, ye, w: integer; 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; end. Що погано??
  • 104. Як з’єднати точки? Алгоритм: Якщо перша точка перейти в точку (xе,yе) інакше відрізок в точку (xе,yе) Програма: початкове значення вибір варіанта дії логічна змінна var first: boolean; ... begin ... first := True; while x <= xmax do begin ... if first then begin MoveTo(xe, ye); first := False; end else LineTo(xe, ye); ... end; end.
  • 105. Завдання "4": Побудувати графік функції y = x2 на інтервалі [-3,3]. "5": Побудувати графік функції (еліпс) 1 916 22  yx
  • 106. Програмування на мові Паскаль Тема 9. Процедури © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 107. Процедури Задача: Побудувати фігуру: Особливості: Три схожі фігури. подібності: розміри, кут повороту відмінності: координати, колір Чи можна розв’язати відомими методами?? Скільки координат потрібно задати??
  • 108. Процедури Процедура – це допоміжний алгоритм, який призначений для виконання деяких дій. Примітка: • виконання однакових дій в різних місцях програми • розбивка програми (або іншої процедури) на підзадачі для кращого сприймання Підзадача1 Підзадача2 Підзадача3 1.1 1.2 1.3 2.1 2.2 2.3 3.1 3.2 3.3 Задача
  • 109. Процедури Порядок розробки: • виділити однакові або схожі дії (три фігури) • знайти в них спільне (розміри, форма, кут повороту) і відмінності (координати, колір) • відмінності записати у вигляді невідомих змінних, вони будуть параметрами процедури (x, y) 100 60 (x+100, y) (x, y-60) procedure Tr( x, y, r, g, b: integer); begin MoveTo(x, y); LineTo(x, y-60); LineTo(x+100, y); LineTo(x, y); Brush(1, r, g, b); Fill(x+20, y-20); end; заголовок тіло процедури координати колір параметри
  • 110. Програма program qq; begin Pen(1, 255, 0, 255); Tr(100, 100, 0, 0, 255); Tr(200, 100, 0, 255, 0); Tr(200, 160, 255, 0, 0); end. (100,100) 100 60 процедура фактичні параметри виклик процедури procedure Tr( x, y, r, g, b: integer); begin ... end; формальні параметри
  • 111. Процедури Особливості: • всі процедури розміщені вище основної програми • в заголовку процедури перераховуються формальні параметри, вони позначаються іменами, оскільки можуть змінюватися • при виклику процедури в дужках вказуються фактичні параметри (числа або арифметичні вирази) в тому ж порядку procedure Tr( x, y, r, g, b: integer); Tr (200, 100, 0, 255, 0); x y r g b
  • 112. Процедури Особливості: • для кожного формального параметра після двокрапки вказується його тип • якщо однотипні параметри стоять поряд, їх перераховують через кому • всередині процедури параметри використовуються так само, як і змінні procedure A (x: real; y: integer; z: real); procedure A (x, z: real; y, k, l: integer);
  • 113. Процедури Особливості: • в процедурі можна оголошувати додаткові локальні змінні, інші процедури не мають до них доступу program qq; procedure A(x, y: integer); var a, b: real; begin a := (x + y)/6; ... end; begin ... end. локальні змінні
  • 114. Параметри-змінні Задача: скласти процедуру, яка міняє місцями значення двох змінних. Особливості: потрібно, щоб зміни зроблені в процедурі, стали відомі програмі яка викликає program qq; var x, y: integer; begin x := 1; y := 2; Exchange ( x, y ); writeln ( ’x = ’, x, ’ y = ’, y ); end; procedure Exchange ( a, b: integer ); var c: integer; begin c := a; a := b; b := c; end; ця процедура працює з копіями параметрів x = 1 y = 2
  • 115. Параметри-змінні Примітка: таким чином процедура (і функція) можуть повертати декілька значень, Заборонені варіанти виклику Exchange ( 2, 3 ); { числа } Exchange ( x+z, y+2 ); { вирази } procedure Exchange ( a, b: integer ); var c: integer; begin c := a; a := b; b := c; end; var параметри можуть змінюватися
  • 116. Задания "4": Використовуючи процедуру, побудувати фігуру. "5": Використовуючи процедуру, побудувати фігуру.
  • 117. Програмування на мові Паскаль Тема 10. Рекурсія © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 118. Рекурсивні об’єкти Рекурсивний об’єкт – це об’єкт, визначений через один або декілька таких же об’єктів. У попа була собака, він її любив. Вона з’їла кусок м’яса, він її убив. В ямку закопав, надпис написав: Казка про попа і собаку Приклади: Казка про попа і собаку: Факторіал:       .1,)!1( ,1,1 ! NNN N N якщо якщо 12)1(! 1234!34!4 123!23!3,12!12!2,1!1    NNN Малюнок з рекурсією:
  • 119. Дерево Піфагора Дерево Піфагора з N рівнів – це стовбур і відходячі від нього симетрично два дерева Піфагора з N-1 рівнем, такі що довжина їх стовбурів в 2 рази менша і кут між ними рівний 90o. 6 рівнів: Як довести, що це рекурсивна фігура??
  • 120. Дерево Піфагора Особливості: • коли зупинитися? • дерева мають різний нахил коли кількість рівнів, що залишилися стане рівним нулю! (x1, y1) (x0, y0) α α+45o α-45o L x1 = x0 + L·cos(α) y1 = y0 – L·sin(α) нахил "дочірніх" дерев α + π/4 α – π/4
  • 121. Процедура кут α довжина стовбура procedure Pifagor(x0, y0, a, L: real; N: integer); const k = 0.6; { зміна довжини } var x1, y1: real; { локальні змінні } begin if N > 0 then begin x1 := x0 + L*cos(a); y1 := y0 - L*sin(a); Line (round(x0), round(y0), round(x1), round(y1)); Pifagor (x1, y1, a+pi/4, L*k, N-1); Pifagor (x1, y1, a-pi/4, L*k, N-1); end; end; рекурсивні виклики завершити, якщо N=0 Рекурсивною називається процедура, викликаюча сама себе.
  • 122. Програма program qq; procedure Pifagor(x0, y0, a, L: real; N: integer); ... end; begin Pifagor (250, 400, pi/2, 150, 8); end; кут α довжина стовбура кількість рівнівx0 y0 Як нахилити дерево вправо на 30o?? Pifagor (250, 400, 2*pi/3, 150, 8);
  • 123. "4": Використовуючи рекурсивну процедуру, побудувати фігуру: "5": Використовуючи рекурсивну процедуру, побудувати фігуру : Задания
  • 124. Програмування на мові Паскаль Тема 11. Анімація © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 125. Анімація Анімація (англ. animation) – оживлення зображення на екрані. Задача: всередині синього квадрата 400 на 400 пікселів зліва направо рухається жовтий квадрат 20 на 20 пікселів. Програма зупиняється, якщо натиснута клавіша Esc або квадрат дійшов до границі синьої області. Проблема: як зобразити переміщення об’єкта на екрані? Прив’язка: розміщення об’єкта задається координатами (x,y) Принцип анімації: 1. малюємо об’єкт в точці (x,y) 2. затримка на декілька мілісекунд 3. затираємо об’єкт 4. змінюємо координати (x,y) 5. переходимо до кроку 1
  • 126. Як "зловити" натискуванням клавіші? Подія – це зміна в стані якого-небудь об’єкта або дія користувача (натиснення на клавішу, клік мишкою). IsEvent – логічна функція, яка визначає, чи були які-небудь дії користувача. Event – процедура, яка визначає, які саме дії відбулися. if IsEvent then begin Event(k, x, y); if k = 1 then writeln('Клавіша з кодом ', x) else { k = 2 } writeln('Мишка: x=', x, ' y=', y); end; var k, x, y: integer;
  • 127. Як вийти з циклу при натисканні Esc? program qq; var stop: boolean; k,code,i: integer; begin stop := False; repeat if IsEvent then begin Event(k, code, i); if (k = 1) and (code = 27) then stop := True; end; ... until stop; end; якщо що-небудь відбулося... що відбулося? якщо натиснута клавіша з кодом 27 (Esc), то стоп True, якщо потрібно зупинитися запуск циклу
  • 128. Процедура (малювання і стирання) procedure Draw(x, y: integer; flag: boolean); begin if flag then Brush(1, 255, 255, 0) else Brush(1, 0, 0, 255); Rectangle(x, y, x+20, y+20); end; (x, y) (x+20, y+20) Ідея • одна процедура малює і стирає • стерти = намалювати кольором фону • границю квадрата відключити (в основній програмі) малювати (True) або ні (False)? малюємо: колір пензлика – жовтий стираємо: колір пензлика – синій тільки заливка!
  • 129. Повна програма 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, 10, 400, 400); Pen(0, 0, 0, 255); x := 10; y := 200; stop := false; repeat if IsEvent then begin ... end; Draw(x, y, True); Delay(10); Draw(x, y, False); x := x + 1; if x >= 400-20 then stop := true; until stop; end. процедура початкова умова вихід по клавіші Esc вихід при досягненні границі синій фон чекаємо 10 мс відключити границю
  • 130. "4": Два квадрати рухаються в протилежних напрямках: "5": Два квадрати рухаються в протилежних напрямках і відбиваються від стінок синього квадрата: Завдання
  • 131. Керування клавішами Задача: жовтий квадрат всередині синього квадрата керується клавішами-стрілками. Коди клавіш: вліво – 37 вверх – 38 Esc – 27 вправо – 39 вниз – 40 Проблема: як змінити напрям руху? Розв’язання: if {була подія} then begin if {натиснута клавіша} then begin {отримати код клавіші - code} if code = 37 then x := x – 1; if code = 38 then y := y – 1; if code = 39 then x := x + 1; if code = 40 then y := y + 1; if code = 27 then stop := True; end; end; IsEvent Event ( k, code, i); if k = 1 then begin case code of 37: x := x – 1; 38: y := y – 1; 39: x := x + 1; 40: y := y + 1; 27: stop := True; end; якщо було натиснуто на клавішу, …
  • 132. Програма program qq; var x, y, k, code, i: integer; stop: boolean; begin ... repeat Draw(x, y, True); Delay(20); Draw(x, y, False); until stop; end. procedure Draw(x,y: integer; flag: Boolean); begin ... end; if IsEvent then begin ... end; Що погано?? процедура основний цикл опрацювання подій
  • 133. Як забрати блимання? Проблема: навіть якщо не натиснута жодна клавіша, квадрат перемальовується через кожні 20 мс (блимання!) Що бажається: не перемальовувати квадрат, якщо не було ніяких подій Розв’язання: намалювати квадрат і чекати подію Нова проблема: як чекати подію? Розв’язання нової проблеми: пустий цикл "поки не трапилася подія, нічого не робити": while not IsEvent do;
  • 134. Програма program qq; var x, y, k, code, i: integer; stop: boolean; begin ... repeat Draw(x, y, True); while not IsEvent do; until stop; end. procedure Draw(x,y: integer; flag: Boolean); begin ... end; Draw(x, y, False); Event(k, code, i); ... while not IsEvent do; процедура малюємо квадрат чекаємо подію тільки тепер стираємо Що можна покращити??
  • 135. "4": Квадрат рухається при натисненні стрілок, проте не може вийти за границі синього квадрата: "5": Квадрат неперервно рухається, при натисненні стрілок міняє напрям і відбивається від стінок синього квадрата: Завдання
  • 136. Обертання Задача: зобразити модель обертання Землі навколо Сонця. Проблема: рух по колу, як змінюються координати? Розв’язання: використовувати в якості незалежної змінної (змінювати в циклі) кут повороту α (x0, y0) α L (x, y) x = x0 + L·cos(α) y = y0 – L·sin(α)
  • 137. Процедура procedure Draw(x, y: integer; flag: boolean); const r = 10; begin if flag then Brush(1, 100, 100, 255) else Brush(1, 0, 0, 0); Ellipse(x-r, y-r, x+r, y+r); end; малювати (True) або ні (False)? малюємо: колір пензлика – голубий стираємо: колір пензлика – чорний тільки заливка! радіус Землі (x-r, y-r) (x,y) (x+r, y+r)
  • 138. Константи і змінні program qq; const rSun = 60; { радіус Сонця} L = 150; { радіус орбіти Землі } x0 = 200; { координати центра Сонця} y0 = 200; var x, y, { координати Землі } k, code, i: integer; { для Event } a, ha: real; { кут повороту, крок } stop: boolean; { признак зупинки програми } begin ... end. procedure Draw(x, y: integer; flag: Boolean); begin ... end;
  • 139. Основна програма program qq; ... begin Brush(1, 0, 0, 0); Fill(1,1); Brush(1, 255, 255, 0); Ellipse(x0-rSun, y0-rSun, x0+rSun, y0+rSun); a := 0; ha := 1*pi/180; { початковий кут, крок 1o за 100 мс} stop := false; Pen(0,0,0,0); { відключаємо контури } repeat x := round(x0 + L*cos(a)); y := round(y0 - L*sin(a)); Draw(x, y, True); Delay(100); Draw(x, y, False); a := a + ha; until stop; end. залити фон чорним малюємо Сонце нові координати поворот на ha чекаємо 100 мс if IsEvent then begin Event(k, code, i); if (k = 1) and (code = 27) then stop := true; end;
  • 140. "4": Зобразити модель Сонця з двома планетами, які обертаються в протилежних напрямках: "5": Зобразити модель системи Сонце-Земля- Місяць: Завдання
  • 141. Програмування на мові Паскаль Тема 12. Випадкові числа © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 142. Випадкові числа Випадкові події: всюди… • підкидання монети (“герб" або “копійка") • падіння снігу • броунівський рух • перешкоди при телефонному зв’язку • шум радіоефіру Випадкові числа – це така послідовність чисел, для якої неможливо передбачити наступне число, якщо навіть відомі попередні. Проблема: як одержати на комп’ютері? Можливі розв’язання: • використовувати зовнішнє джерело шумових перешкод • з допомогою математичних перетворень
  • 143. Псевдовипадкові числа Псевдовипадкові числа – це така послідовність чисел, яка має властивості випадкових чисел, проте кожне наступне число обчислюється по заданій формулі. Приклади: 1. Випадкові цілі числа [0,m) (лінійний конгруентний метод) 2. Випадкові дійсні числа [0,1] Література: Д. Кнут, Мистецтво програмування для ЕОМ, т.2. 1073741823mod)1234516807( 1  nn xx  k nn xx )( 1 дробова частина числа a, c, m – цілі числаmcxax nn mod)( 1   просте число 230-1 наприклад, k = 5
  • 144. Розподіл випадкових чисел Модель: сніжинки падають на відрізок [a,b] a b a b розподіл рівномірний нерівномірний Скільки може бути різних розподілів ??
  • 145. Розподіл випадкових чисел Особливості: • розподіл – це характеристика всієї послідовності, а не одного числа • рівномірний розподіл один, комп’ютерні датчики (псевдо)випадкових чисел дають рівномірний розподіл • нерівномірних – багато • будь-яке нерівномірне можна отримати з допомогою рівномірного a b 2 21 xx x   a b 12 1221 xxx x    рівномірний розподіл рівномірний розподіл
  • 146. Генератор випадкових чисел в Паскалі Цілі числа в інтервалі [0,N]: var x: integer; ... x := random ( 100 ); { інтервал [0,99] } Дійсні числа в інтервалі [0,1] var x: real; ... x := random; { інтервал [0,1] }
  • 147. Випадкові числа Задача: заповнити прямокутник 400 на 300 пікселів рівномірно точками випадкового кольору Як отримати випадкові координати точки? x := random ( 400 ); y := random ( 300 ); Як досягти рівномірності? забезпечується автоматично при використанні функції random Як отримати випадковий колір? Pen (1, random(256), random(256), random(256)); Point ( x, y );
  • 148. Програма 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), random(256)); Point(x, y ); if IsEvent then begin Event(k, code, i); if (k = 1) and (code = 27) then stop := True; end; until stop; end. випадкові координати випадковий колір вихід по клавіші Esc
  • 149. "4": Ввести з клавіатури координати кутів прямокутника і заповнити його точками випадкового кольору. "5": Заповнити трикутник точками випадкового кольору (рівномірно або нерівномірно). Підказка: візьміть рівнобедрений трикутник з кутом 45о. Завдання (100,100) (300,200)
  • 150. Програмування на мові Паскаль Тема 13. Функції © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик
  • 151. Функції Функція – це допоміжний алгоритм (підпрограма), результатом роботи якої є деяке значення. Приклади: • обчислення , , • розрахунок значення по складених формулах • відповідь на запитання (просте число або ні?) Для чого? • для обчислення однакових розрахунків в різних місцях програми • для створення загальнодоступних бібліотек функцій xsin xxcos В чому відмінність від процедури??
  • 152. Функції Задача: скласти функцію, яка обчислює більше з двох значень, і навести приклад її використання Функція: формальні параметри function Max (a, b: integer): integer; begin if a > b then Max := a else Max := b; end. це результат функції
  • 153. Функції Особливості: • заголовок починається словом function • формальні параметри описуються так само, як і для процедур • можна використовувати параметри-змінні • в кінці заголовка через двокрапку вказується тип результату • функції розміщуються ВИЩЕ основної програми Max (a, b: integer): integer;function function Max (a, b: integer): ;integer function qq( a, b: integer; x: real ): real;a, b: integer; x: real function Max ( a, b: integer): integer;var
  • 154. Функції Особливості: • можна оголошувати і використовувати локальні змінні • значення, яке є результатом, записується в змінну, ім’я якої співпадає з назвою функції; оголошувати НЕ ПОТРІБНО: function Max (a, b: integer): integer; begin ... end; Max := a; function qq (a, b: integer): float; begin ... end; var x, y: float; В Delphi:! Result := a;
  • 155. Програма program qq; var a, b, max: integer; begin writeln(‘Введіть два числа'); read(a, b); max := Max ( a, b ); writeln(‘Найбільше число ', max ); end. function Max (a, b: integer): integer; begin ... end; c c c Імена змінних, функцій і процедур не повинні співпадати! ! фактичні параметри виклик функції
  • 156. Логічні функції Задача: скласти функцію, яка визначає, чи дійсно, що задане число – просте. Особливості: • відповідь – логічне значення (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 складене } Як краще??
  • 157. Логічні функції program qq; var N: integer; begin writeln(‘Ввести ціле число'); read(N); if Prime(N) then writeln(N, ' – просте число') else writeln(N, ' – складене число'); end. 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; виклик функції результат – логічне значення перебір тільки до N умова – це логічне значення
  • 158. Завдання "4": Скласти функцію, яка визначає суму всіх чисел від 1 до N і навести приклад її використання. Приклад: Ввести число: 100 сума = 5050 "5": Скласти функцію, яка визначає, скільки зерен попросив положити на N-ту клітку винахідник шахмат (на 1-шу – 1 зерно, на 2-у – 2 зерна, на 3-ю – 4 зерна, …) Приклад: Ввести номер клітки: 28 На 28-ой клітці 134217728 зерен.
  • 159. Завдання (варіант 2) "4": Скласти функцію, яка визначає найбільший спільний дільник двох натуральних чисел і навести приклад її використання. Приклад: Ввести два числа: 14 21 НСД(14,21)=7 "5": Скласти функцію, яка обчислює синус як суму ряду (с точністю 0.001) Приклад: Ввести кут в градусах: 45 sin(45) = 0.707  !7!5!3 sin 753 xxx xx x в радіанах!