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. Розгалуження
Алгоритми розгалуження
Задача. Ввести два цілих числа і вивести на екран
більше з них.
Ідея розв’язання: потрібно вивести на екран перше
число, якщо воно більше другого, або друге, якщо воно
більше першого.
Особливості: дії виконавця залежать від деяких умов
(якщо … інакше …).
Алгоритми, в яких послідовність кроків залежить від
виконання деяких умов, називаються розгалуженими.
Варіант 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. Складені умови
Складені умови
Задача. Фірма набирає співробітників від 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. Цикли
Цикли
Цикл – це багатократне виконання однакової
послідовності дій.
• цикл з відомою кількістю кроків
• цикл з невідомою кількістю кроків (цикл з умовою)
Задача. Вивести на екран квадрати і куби цілих чисел від
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. Цикли з умовою
Цикл з невідомою кількістю кроків
Приклад: Відрізати поліно від колоди. Скільки разів потрібно
зробити рух пилкою?
Задача: Ввести ціле число (<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. Оператор вибору
Оператор вибору
Задача: Ввести номер місяця і вивести кількість
днів в цьому місяці.
Розв’язання: Кількість днів у місяцях:
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. Графіка
Система координат
(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. Графіки функцій
Побудова графіків функцій
Задача: побудувати графік функції 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. Процедури
Процедури
Задача: Побудувати фігуру:
Особливості: Три схожі фігури.
подібності: розміри, кут повороту
відмінності: координати, колір
Чи можна розв’язати відомими методами??
Скільки координат потрібно задати??
Процедури
Процедура – це допоміжний алгоритм, який призначений
для виконання деяких дій.
Примітка:
• виконання однакових дій в різних місцях програми
• розбивка програми (або іншої процедури) на
підзадачі для кращого сприймання
Підзадача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. Рекурсія
Рекурсивні об’єкти
Рекурсивний об’єкт – це об’єкт, визначений через один
або декілька таких же об’єктів.
У попа була собака, він її любив.
Вона з’їла кусок м’яса, він її убив.
В ямку закопав, надпис написав:
Казка про попа і собаку
Приклади: Казка про попа і собаку:
Факторіал:






.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. Анімація
Анімація
Анімація (англ. 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. Випадкові числа
Випадкові числа
Випадкові події: всюди…
• підкидання монети (“герб" або “копійка")
• падіння снігу
• броунівський рух
• перешкоди при телефонному зв’язку
• шум радіоефіру
Випадкові числа – це така послідовність чисел, для якої
неможливо передбачити наступне число, якщо навіть
відомі попередні.
Проблема: як одержати на комп’ютері?
Можливі розв’язання:
• використовувати зовнішнє джерело шумових перешкод
• з допомогою математичних перетворень
Псевдовипадкові числа
Псевдовипадкові числа – це така послідовність чисел, яка має
властивості випадкових чисел, проте кожне наступне число
обчислюється по заданій формулі.
Приклади:
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. Функції
Функції
Функція – це допоміжний алгоритм (підпрограма),
результатом роботи якої є деяке значення.
Приклади:
• обчислення , ,
• розрахунок значення по складених формулах
• відповідь на запитання (просте число або ні?)
Для чого?
• для обчислення однакових розрахунків в різних
місцях програми
• для створення загальнодоступних бібліотек функцій
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

Wykonywanie obturatorów i protez natychmiastowych
Wykonywanie obturatorów i protez natychmiastowych Wykonywanie obturatorów i protez natychmiastowych
Wykonywanie obturatorów i protez natychmiastowych Dawid Bogocz
 
13. Prowadzenie dokumentacji stomatologicznej
13. Prowadzenie dokumentacji stomatologicznej13. Prowadzenie dokumentacji stomatologicznej
13. Prowadzenie dokumentacji stomatologicznejKamil Kiełczewski
 
5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia
5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia
5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowiaWiktor Dąbrowski
 
Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...
Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...
Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...270479
 
прямокутний трикутник та його елементи
прямокутний трикутник та його елементипрямокутний трикутник та його елементи
прямокутний трикутник та його елементиMaryna Zaharova
 
Геометричне місце точок
Геометричне місце точокГеометричне місце точок
Геометричне місце точокNataliaGrychko
 
Органайзер (1).pptx
Органайзер (1).pptxОрганайзер (1).pptx
Органайзер (1).pptxYulya Lyashenko
 
побудова правильних многокутників
побудова правильних многокутниківпобудова правильних многокутників
побудова правильних многокутниківelenatkachuk
 
АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...
АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...
АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...Centre of Policy and Legal Reform
 
9. Prowadzenie dokumentacji stomatologicznej
9. Prowadzenie dokumentacji stomatologicznej9. Prowadzenie dokumentacji stomatologicznej
9. Prowadzenie dokumentacji stomatologicznejWiktor Dąbrowski
 
статут нова редакція від18.08.2021
статут нова редакція від18.08.2021статут нова редакція від18.08.2021
статут нова редакція від18.08.2021Антон Земляков
 
Wykonywanie protezy ruchomej z elementami precyzyjnymi
Wykonywanie protezy ruchomej z elementami precyzyjnymi Wykonywanie protezy ruchomej z elementami precyzyjnymi
Wykonywanie protezy ruchomej z elementami precyzyjnymi Dawid Bogocz
 
БЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИ
БЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИБЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИ
БЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИOleksii Voronkin
 

What's hot (20)

алгебра 9кл контрольна
алгебра 9кл контрольнаалгебра 9кл контрольна
алгебра 9кл контрольна
 
1
11
1
 
Wykonywanie obturatorów i protez natychmiastowych
Wykonywanie obturatorów i protez natychmiastowych Wykonywanie obturatorów i protez natychmiastowych
Wykonywanie obturatorów i protez natychmiastowych
 
Bielizna szpitalna
Bielizna szpitalnaBielizna szpitalna
Bielizna szpitalna
 
13. Prowadzenie dokumentacji stomatologicznej
13. Prowadzenie dokumentacji stomatologicznej13. Prowadzenie dokumentacji stomatologicznej
13. Prowadzenie dokumentacji stomatologicznej
 
5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia
5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia
5. Stosowanie przepisów prawa i zasad ekonomiki w ochronie zdrowia
 
Promowanie zdrowia
Promowanie zdrowiaPromowanie zdrowia
Promowanie zdrowia
 
Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...
Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...
Презентація Урок -ділова гра "Банківська справа" з алгебри на тему «Відсотков...
 
6
66
6
 
прямокутний трикутник та його елементи
прямокутний трикутник та його елементипрямокутний трикутник та його елементи
прямокутний трикутник та його елементи
 
Геометричне місце точок
Геометричне місце точокГеометричне місце точок
Геометричне місце точок
 
1
11
1
 
Органайзер (1).pptx
Органайзер (1).pptxОрганайзер (1).pptx
Органайзер (1).pptx
 
Ранкова зустріч
Ранкова зустрічРанкова зустріч
Ранкова зустріч
 
побудова правильних многокутників
побудова правильних многокутниківпобудова правильних многокутників
побудова правильних многокутників
 
АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...
АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...
АЛЬТЕРНАТИВНИЙ ЗВІТ з оцінки ефективності впровадження державної антикорупцій...
 
9. Prowadzenie dokumentacji stomatologicznej
9. Prowadzenie dokumentacji stomatologicznej9. Prowadzenie dokumentacji stomatologicznej
9. Prowadzenie dokumentacji stomatologicznej
 
статут нова редакція від18.08.2021
статут нова редакція від18.08.2021статут нова редакція від18.08.2021
статут нова редакція від18.08.2021
 
Wykonywanie protezy ruchomej z elementami precyzyjnymi
Wykonywanie protezy ruchomej z elementami precyzyjnymi Wykonywanie protezy ruchomej z elementami precyzyjnymi
Wykonywanie protezy ruchomej z elementami precyzyjnymi
 
БЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИ
БЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИБЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИ
БЛОК НАЦІОНАЛЬНОГО МУЛЬТИПРЕДМЕТНОГО ТЕСТУ З МАТЕМАТИКИ
 

Similar to Паскаль

Основи програмування .Паскаль ч.1
Основи програмування .Паскаль ч.1Основи програмування .Паскаль ч.1
Основи програмування .Паскаль ч.1rznz
 
Pascal osnovu
Pascal osnovuPascal osnovu
Pascal osnovuEscuela
 
Programuvanna na movi_pascal
Programuvanna na movi_pascalProgramuvanna na movi_pascal
Programuvanna na movi_pascalAnn Eres
 
Programuvanna na movi_pascal
Programuvanna na movi_pascalProgramuvanna na movi_pascal
Programuvanna na movi_pascal1cana1
 
програмування на мові паскаль
програмування на мові паскаль програмування на мові паскаль
програмування на мові паскаль Helen Pata
 
програмування мовою паскаль функції
програмування мовою паскаль функціїпрограмування мовою паскаль функції
програмування мовою паскаль функціїOlga Lyulchik
 
Основи мови Ci
Основи мови CiОснови мови Ci
Основи мови CiEscuela
 
програмування
програмуванняпрограмування
програмуванняOlga Lyulchik
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt urokuVasiliy66
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt urokuVasiliy66
 
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листкуінформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листкуШкола №7 Миргород
 
урок 12 вирази мова Паскаль
урок 12 вирази  мова Паскальурок 12 вирази  мова Паскаль
урок 12 вирази мова ПаскальHelen Pata
 
Konspekt uroky
Konspekt urokyKonspekt uroky
Konspekt urokyVasiliy66
 
Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Dmitry Chabanenko
 
Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++Alexander Kuzmenko
 

Similar to Паскаль (20)

Основи програмування .Паскаль ч.1
Основи програмування .Паскаль ч.1Основи програмування .Паскаль ч.1
Основи програмування .Паскаль ч.1
 
3018 1
3018 13018 1
3018 1
 
Pascal osnovu
Pascal osnovuPascal osnovu
Pascal osnovu
 
Pascal основи програмування частина 1
Pascal основи програмування частина 1Pascal основи програмування частина 1
Pascal основи програмування частина 1
 
Programuvanna na movi_pascal
Programuvanna na movi_pascalProgramuvanna na movi_pascal
Programuvanna na movi_pascal
 
Programuvanna na movi_pascal
Programuvanna na movi_pascalProgramuvanna na movi_pascal
Programuvanna na movi_pascal
 
програмування на мові паскаль
програмування на мові паскаль програмування на мові паскаль
програмування на мові паскаль
 
програмування мовою паскаль функції
програмування мовою паскаль функціїпрограмування мовою паскаль функції
програмування мовою паскаль функції
 
Основи мови Ci
Основи мови CiОснови мови Ci
Основи мови Ci
 
програмування
програмуванняпрограмування
програмування
 
Povtor 7 8kl
Povtor 7 8klPovtor 7 8kl
Povtor 7 8kl
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt uroku
 
Konspekt uroku
Konspekt urokuKonspekt uroku
Konspekt uroku
 
5971 789623
5971 7896235971 789623
5971 789623
 
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листкуінформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
інформатика алгор та прогр по підручнику верлань 2 стор на 1 листку
 
алгоритм урок 3
алгоритм урок 3алгоритм урок 3
алгоритм урок 3
 
урок 12 вирази мова Паскаль
урок 12 вирази  мова Паскальурок 12 вирази  мова Паскаль
урок 12 вирази мова Паскаль
 
Konspekt uroky
Konspekt urokyKonspekt uroky
Konspekt uroky
 
Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1Основи алгоритмізації та програмування. Лекція 1
Основи алгоритмізації та програмування. Лекція 1
 
Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++Знайомство з програмуванням на мові C++
Знайомство з програмуванням на мові C++
 

More from Irina Tabanets

створення запитів в Ms access
створення запитів в Ms accessстворення запитів в Ms access
створення запитів в Ms accessIrina Tabanets
 
інформаційна довідка
інформаційна довідкаінформаційна довідка
інформаційна довідкаIrina Tabanets
 
обладнання навчальних приміщень та майданчиків
 обладнання навчальних приміщень та майданчиків обладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиківIrina Tabanets
 
відомості мат тех бази
відомості мат тех базивідомості мат тех бази
відомості мат тех базиIrina Tabanets
 
31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон
31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон
31 3 забезпечення підручниками та навчальними посібниками, рекомендованими монIrina Tabanets
 
30 3 обладнання навчальних приміщень та майданчиків
30 3 обладнання навчальних приміщень та майданчиків30 3 обладнання навчальних приміщень та майданчиків
30 3 обладнання навчальних приміщень та майданчиківIrina Tabanets
 
30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази 30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази Irina Tabanets
 
інформаційна довідка
інформаційна довідка інформаційна довідка
інформаційна довідка Irina Tabanets
 
Відомості про показники кадрового забезпечення
Відомості про показники кадрового забезпеченняВідомості про показники кадрового забезпечення
Відомості про показники кадрового забезпеченняIrina Tabanets
 
відомості про навчально-методичне (програмне) забезпечення.
 відомості про навчально-методичне (програмне) забезпечення. відомості про навчально-методичне (програмне) забезпечення.
відомості про навчально-методичне (програмне) забезпечення.Irina Tabanets
 
відомості мат тех бази
 відомості мат тех бази відомості мат тех бази
відомості мат тех базиIrina Tabanets
 
інформаційна довідка
інформаційна довідкаінформаційна довідка
інформаційна довідкаIrina Tabanets
 
забезпечення підручниками та навчальними посібниками, рекомендованими мон
 забезпечення підручниками та навчальними посібниками, рекомендованими мон забезпечення підручниками та навчальними посібниками, рекомендованими мон
забезпечення підручниками та навчальними посібниками, рекомендованими монIrina Tabanets
 
обладнання навчальних приміщень та майданчиків
 обладнання навчальних приміщень та майданчиків обладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиківIrina Tabanets
 
обладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиківобладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиківIrina Tabanets
 
30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази30 1.2 відомості мат тех бази
30 1.2 відомості мат тех базиIrina Tabanets
 
завдання Publisher
завдання Publisherзавдання Publisher
завдання PublisherIrina Tabanets
 
Створення форм
Створення формСтворення форм
Створення формIrina Tabanets
 
пр робота повторення_urok_3
пр робота повторення_urok_3пр робота повторення_urok_3
пр робота повторення_urok_3Irina Tabanets
 

More from Irina Tabanets (20)

створення запитів в Ms access
створення запитів в Ms accessстворення запитів в Ms access
створення запитів в Ms access
 
інформаційна довідка
інформаційна довідкаінформаційна довідка
інформаційна довідка
 
обладнання навчальних приміщень та майданчиків
 обладнання навчальних приміщень та майданчиків обладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиків
 
відомості мат тех бази
відомості мат тех базивідомості мат тех бази
відомості мат тех бази
 
31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон
31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон
31 3 забезпечення підручниками та навчальними посібниками, рекомендованими мон
 
30 3 обладнання навчальних приміщень та майданчиків
30 3 обладнання навчальних приміщень та майданчиків30 3 обладнання навчальних приміщень та майданчиків
30 3 обладнання навчальних приміщень та майданчиків
 
30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази 30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази
 
інформаційна довідка
інформаційна довідка інформаційна довідка
інформаційна довідка
 
Відомості про показники кадрового забезпечення
Відомості про показники кадрового забезпеченняВідомості про показники кадрового забезпечення
Відомості про показники кадрового забезпечення
 
відомості про навчально-методичне (програмне) забезпечення.
 відомості про навчально-методичне (програмне) забезпечення. відомості про навчально-методичне (програмне) забезпечення.
відомості про навчально-методичне (програмне) забезпечення.
 
відомості мат тех бази
 відомості мат тех бази відомості мат тех бази
відомості мат тех бази
 
інформаційна довідка
інформаційна довідкаінформаційна довідка
інформаційна довідка
 
забезпечення підручниками та навчальними посібниками, рекомендованими мон
 забезпечення підручниками та навчальними посібниками, рекомендованими мон забезпечення підручниками та навчальними посібниками, рекомендованими мон
забезпечення підручниками та навчальними посібниками, рекомендованими мон
 
обладнання навчальних приміщень та майданчиків
 обладнання навчальних приміщень та майданчиків обладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиків
 
обладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиківобладнання навчальних приміщень та майданчиків
обладнання навчальних приміщень та майданчиків
 
30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази30 1.2 відомості мат тех бази
30 1.2 відомості мат тех бази
 
завдання Publisher
завдання Publisherзавдання Publisher
завдання Publisher
 
Створення форм
Створення формСтворення форм
Створення форм
 
Масиви
МасивиМасиви
Масиви
 
пр робота повторення_urok_3
пр робота повторення_urok_3пр робота повторення_urok_3
пр робота повторення_urok_3
 

Recently uploaded

Луцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxЛуцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxhome
 
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»tetiana1958
 
Критерії самоцінювання Іноземні мови.pdf
Критерії самоцінювання  Іноземні мови.pdfКритерії самоцінювання  Іноземні мови.pdf
Критерії самоцінювання Іноземні мови.pdfolha1koval
 
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptxПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptxAlexanderSholk
 
освітня програма 2023-2024 .
освітня програма  2023-2024                    .освітня програма  2023-2024                    .
освітня програма 2023-2024 .zaskalko111
 
критерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfкритерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfolha1koval
 
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейЧеркаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейvitaliyinformatik
 
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxПрезентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxssuserc6cee7
 
Роберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаРоберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаAdriana Himinets
 
Kryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenKryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenolha1koval
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxvitalina6709
 

Recently uploaded (15)

Луцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptxЛуцький центр ПТО соціальний проєкт .pptx
Луцький центр ПТО соціальний проєкт .pptx
 
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
17.04.2024.1.docx17.04.2024.1.docx17.04.2024.1.docx
 
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»Відкрита лекція на тему «Біологічний захист рослин у теплицях»
Відкрита лекція на тему «Біологічний захист рослин у теплицях»
 
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
Віртуальна виставка «Аграрна наука України у виданнях: історичний аспект»
 
Критерії самоцінювання Іноземні мови.pdf
Критерії самоцінювання  Іноземні мови.pdfКритерії самоцінювання  Іноземні мови.pdf
Критерії самоцінювання Іноземні мови.pdf
 
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptxПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
ПОРТУГАЛІЯ ТА ІСПАНІЯ В ПЕРШІЙ ТРЕТИНІ хх СТ.pptx
 
Її величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptxЇї величність - українська книга презентація-огляд 2024.pptx
Її величність - українська книга презентація-огляд 2024.pptx
 
освітня програма 2023-2024 .
освітня програма  2023-2024                    .освітня програма  2023-2024                    .
освітня програма 2023-2024 .
 
критерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdfкритерії сооцінювання і взаємооцінюваннятехнології.pdf
критерії сооцінювання і взаємооцінюваннятехнології.pdf
 
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверейЧеркаський художньо-технічний коледж оголошує про день відкритих дверей
Черкаський художньо-технічний коледж оголошує про день відкритих дверей
 
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
17.04.2024.2.docx17.04.2024.2.docx17.04.2024.2.docx
 
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptxПрезентація роботи Осипенківської ЗОШ 2023-2024.pptx
Презентація роботи Осипенківської ЗОШ 2023-2024.pptx
 
Роберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантастаРоберт Шеклі. Біографія письменника-фантаста
Роберт Шеклі. Біографія письменника-фантаста
 
Kryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnenKryterii otciniuvannia navchalnykh dosiahnen
Kryterii otciniuvannia navchalnykh dosiahnen
 
Автомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptxАвтомат.звука с.інтегровані ігри для дітейpptx
Автомат.звука с.інтегровані ігри для дітейpptx
 

Паскаль

  • 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
  • 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
  • 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 років
  • 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
  • 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 Немає повторів.
  • 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 днів.
  • 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": Ввести з клавіатури кількість кіл і побудувати фігуру, заливши всі області різними кольорами.
  • 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
  • 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": Використовуючи процедуру, побудувати фігуру.
  • 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": Використовуючи рекурсивну процедуру, побудувати фігуру : Задания
  • 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": Зобразити модель системи Сонце-Земля- Місяць: Завдання
  • 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)
  • 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 в радіанах!