O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.

Programuvanna na movi_pascal

1.959 visualizações

Publicada em

Publicada em: Diversão e humor
  • Seja o primeiro a comentar

Programuvanna na movi_pascal

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

×