Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков, 2006-2007 Переклад: Н. Б. Мартинчук Р. М. Васильчик.

Презентация:



Advertisements
Похожие презентации
Програмування на мові Паскаль Тема Цикли. Цикли Цикл – це багатократне виконання однакової послідовності дій. цикл з відомою кількістю кроків цикл з невідомою.
Advertisements

Тема 2. Розгалуження. Алгоритми розгалуження Задача. Ввести два цілих числа і вивести на екран більше з них. Ідея розвязання: потрібно вивести на екран.
Основи алгоритмізації і програмування. Тема 3. Мови програмування (4 год) Структура програми Елементи мови програму- вання.
Програми з розгалуженнями.Команда IF Підготувала Крилік Анастасія 7-Д.
Ковальчук О.М КОМАНДИ РОЗГАЛУЖЕННЯ (Turbo Pascal 7.0) КОМАНДИ РОЗГАЛУЖЕННЯ (Turbo Pascal 7.0) Інформатика-11 Тема-4 Ковальчук О.М., 2007.
Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик.
Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик.
Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик.
Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков Переклад: Н. Б. Мартинчук Р. М. Васильчик.
Програмування на мові Паскаль Тема 1. Вступ. Алгоритм Властивості алгоритму дискретність: складається з окремих кроків (команд) зрозумілість: повинен.
Програмування на мові Паскаль Тема 1. Вступ. Алгоритм Властивості алгоритму дискретність: складається з окремих кроків (команд) зрозумілість: повинен.
Основи алгоритмізації та програмування Вказівка повторення. Цикли.
Бройченко А.Г КОМАНДИ ПОВТОРЕННЯ (Turbo Pascal 7.0) КОМАНДИ ПОВТОРЕННЯ (Turbo Pascal 7.0) Інформатика-11 Тема-4.
Типи даних мови Visual Basic та їх опис. Опис величин Величина - це об'єкт, який має стале або змінне значення. Основні характеристики величин: ім'я,
ОБЧИСЛЮВАЛЬНА СКЛАДНІСТЬ АЛГОРИТМІВ І ПРОГРАМ НА ПРИКЛАДІ ЗАДАЧІ ПРО ЩАСЛИВІ КВИТКИ.
Основи алгоритмізації та програмування Підпрограми.
Основи алгоритмізації та програмування Програми з розгалуженнями.
Програми, модулі 1. Структура програми на ТП 1. Структура програми на ТП 1. Структура програми на ТП 1. Структура програми на ТП 2. Вигляд програми на.
ТЕМА УРОКУ:. ВИБІР В ЖИТТІ ЛЮДИНА РОБИТЬ КОЖНОГО ДНЯ САМА. ВОНА ВИБИРАЄ ДОБРО ЧИ ЗЛО, ПРАВДУ ЧИ НЕПРАВДУ, ЧЕСТЬ ЧИ БЕЗЧЕСТЯ. КОМПЮТЕР РОБИТЬ ВИБІР ЗА.
Основи алгоритмізації та програмування Надання значень величинам. Вказівки присвоєння та введення.
Транксрипт:

Програмування на мові Паскаль Тема 1. Вступ © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик

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

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

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

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

З чого складається програма? 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 ? 5 5 b ? a 5 7*4 28

Оператор присвоєння Загальна структура: := ; Арифметичні вирази можуть містити константи імена змінних знаки арифметичних дій: + - * / 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. ab ??

Порядок виконання операцій обчислення виразів у дужках множення, ділення, div, mod зліва направо додаванні і віднімання зліва направо z := (5*a*c+3*(c-d))/a*(b-c)/ b; 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} Як вводяться два числа? через пропуск: через Enter: a 25 b 30 a 25 b 30

Оператор виведення 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 := ; writeln ( '>', x, '<' ); writeln ( '>', x:10, '<' ); writeln ( '>', x:7:2, '<' ); end. >15< > E+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. Протокол: Ввести два цілих числа =55 це виводить комп'ютер це вводить користувач

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

Завдання "4": Ввести три числа, знайти їх суму і добуток. Приклад: Ввести три числа: =16 4*5*7=140 "5": Ввести три числа, знайти їх суму, добуток і середнє арифметичне. Приклад: Ввести три числа: =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": Ввести три числа і знайти найбільше з них. Приклад: Ввести три числа: Найбільше число 15 "5": Ввести пять чисел і знайти найбільше з них. Приклад: Ввести пять чисел: Найбільше число 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, >=, =, <> Особливості – кожна з простих умов обов'язково береться в дужки. Приклад 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 c) Для яких значень x істинні умови: (x < 6) and (x < 10) (x 10) (x > 6) and (x < 10) (x > 6) and (x > 10) (x < 6) or (x < 10) (x 10) (x > 6) or (x < 10) (x > 6) or (x > 10) Складена умова True FALSE (-, 6) (6, 10) (10, ) (-, 10) (-, 6) (10, ) (-, ) (6, ) x < 6x < 6 x > 10 x < 10 x > 6x > 6 True

Завдання "4": Ввести номер місяця і вивести назву пори року. Приклад: Ввести номер місяця: 4 весна "5": Ввести вік людини (від 1 до 150 років) и вивести його разом з наступним слово рік, роки" або років". Приклад: Ввести вік: Вам 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 = 4a = 4 a := 1; for i:=3 to 1 do a := a+1; a = 1a = 1 a := 1; for i:=1 downto 3 do a := a+1; a = 1a = 1 a := 1; for i:=3 downto 1 do a := a+1; a = 4a = 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;... 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; k12345 i13579 i = 2k-1

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

Програмування на мові Паскаль Тема 5. Цикли з умовою © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик

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

Алгоритм початок 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": Ввести ціле число і визначити, чи правда, що в його записі є дві однакові цифри. Приклад: Ввести ціле число: Ввести ціле число: Ні. Так.

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

Послідовності Задача: знайти суму всіх елементів послідовності, які по модулю більші 0,001: Елемент послідовності (починаючи з 2): n b12345 c z 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) > 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 = "5": Знайти суму елементів послідовності з точністю 0,001: Відповідь: S = 1.220

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

Цикл з післяумовою: алгоритм початок кінець так ні 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: Потрібно додатне число. Ні Ввести число >= 0: 1234 Так "5": Ввести натуральне число і визначити, які цифри зустрічаються декілька разів. Приклад: Введіть число >= 0: Повторяються: 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; : 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 x y

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

Точки, відрізки і ламані (x 1, y 1 ) (x 2, y 2 ) Pen (1, 0, 255, 0); Line (x1, y1, x2, y2); (x, y) Pen (1, 0, 0, 255); Point (x, y); (x 1, y 1 ) (x 2, y 2 ) (x 3, y 3 ) (x 4, y 4 ) (x 5, y 5 ) Pen (1, 255, 0, 0); MoveTo (x1, y1); LineTo (x2, y2); LineTo (x3, y3); LineTo (x4, y4); LineTo (x5, y5);

Фігури з заливкою (x 1, y 1 ) (x 2, y 2 ) Pen (1, 0, 0, 255); Brush (1, 255, 255, 0); Rectangle (x1, y1, x2, y2); (x 1, y 1 ) (x 2, y 2 ) 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": "Корона"

Штриховка (x 1, y 1 ) (x 2, y 2 ) N ліній (N=5) 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

Як міняти колір? (x 1, y 1 ) (x 2, y 2 ) Brush ( 1, c, c, c ); Fill ( ???, ??? ); сірий: R = G = B Крок зміни c: x (x-1, y 1 +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;

Штриховка (x 1, y 1 ) (x 2, y 2 ) (x 3, y 2 ) a h (x 3 +a, y 1 ) 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

Штриховка (x 1, y 1 ) (x 2, y 2 ) hxhx hyhy 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);... 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π. Аналіз: максимальне значення y max = 3 при x = π/2 мінімальне значення y min = -3 при x = 3 π/2 Проблема: функція задана в математичній системі координат, будувати потрібно на екрані, вказуючи координати в пікселях.

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

Програма 2π2π h – крок зміни x w – довжина осі ОХ в пікселях на екрані осі координат цикл побудови графіка program qq; const a = 50; b = 200; k = 50; xmin = 0; xmax = ; 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 = x 2 на інтервалі [-3,3]. "5": Побудувати графік функції (еліпс)

Програмування на мові Паскаль Тема 9. Процедури © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик

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

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

Процедури Порядок розробки: виділити однакові або схожі дії (три фігури) знайти в них спільне (розміри, форма, кут повороту) і відмінності (координати, колір) відмінності записати у вигляді невідомих змінних, вони будуть параметрами процедури (x, y) (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) процедура фактичні параметри виклик процедури 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. Рекурсія © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик

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

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

Дерево Піфагора Особливості: коли зупинитися? дерева мають різний нахил коли кількість рівнів, що залишилися стане рівним нулю! (x 1, y 1 ) (x 0, y 0 ) α α+45 o α-45 o L x 1 = x 0 + L · cos(α) y 1 = y 0 – 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; рекурсивні виклики завершити, якщо N=0 Рекурсивною називається процедура, викликаюча сама себе.

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

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

Програмування на мові Паскаль Тема 11. Анімація © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик

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

Як "зловити" натискуванням клавіші? Подія – це зміна в стані якого-небудь обєкта або дія користувача (натиснення на клавішу, клік мишкою). 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 >= then stop := true; until stop; end. процедура початкова умова вихід по клавіші Esc вихід при досягненні границі синій фон чекаємо 10 мс відключити границю

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

Керування клавішами Задача: жовтий квадрат всередині синього квадрата керується клавішами-стрілками. Коди клавіш: вліво – 37 вверх – 38Esc – 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; 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": Квадрат неперервно рухається, при натисненні стрілок міняє напрям і відбивається від стінок синього квадрата: Завдання

Обертання Задача: зобразити модель обертання Землі навколо Сонця. Проблема: рух по колу, як змінюються координати? Розвязання: використовувати в якості незалежної змінної (змінювати в циклі) кут повороту α (x 0, y 0 ) α L (x, y) x = x 0 + L · cos(α) y = y 0 – 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,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; { початковий кут, крок 1 o за 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. дробова частина числа a, c, m – цілі числа просте число наприклад, k = 5

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

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

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

Випадкові числа Задача: заповнити прямокутник 400 на 300 пікселів рівномірно точками випадкового кольору Як отримати випадкові координати точки? x := random ( 400 ); y := random ( 300 ); Як досягти рівномірності? забезпечується автоматично при використанні функції random Як отримати випадковий колір? Pen (1, random(256), random(256), 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. Функції © К.Ю. Поляков, Переклад: Н. Б. Мартинчук Р. М. Васильчик

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

Функції Задача: скласти функцію, яка обчислює більше з двох значень, і навести приклад її використання Функція: формальні параметри 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; виклик функції результат – логічне значення перебір тільки до умова – це логічне значення

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

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