Контакти

Презентація на тему паскаль. Основи програмування на паскалі. Обчислення натурального логарифму

PASCAL ВСТУП В МОВУ ПРОГРАМУВАННЯ 2006 СТРУКТУРА КУРСУ інтерфейс та основні визначення; структура програми; виведення на екран текстової інформації; введення даних із клавіатури; підключення та використання системних модулів; робота з основними типами даних (цілий, речовий, рядковий, масив, файловий) робота з графікою; використання підпрограм (процедури та функції); Використання модулів. 2 ІНТЕРФЕЙС СЕРЕДОВИЩА PASCAL Мова програмування Turbo Pascal 7.0 укладена в інструментальну оболонку. Вона включає: багатовіконний текстовий редактор; компонувальник програм; налагоджувач програм; систему допомоги; компілятор. 3 ІНТЕРФЕЙС СЕРЕДОВИЩА PASCAL 4 Список відкритих файлів: Alt + 0 Швидкий доступ до відкритих файлів: Alt +<№ окна> ОСНОВНІ ВИЗНАЧЕННЯ Зарезервоване слово – це спеціальне слово, яке використовується мовою програмування для відокремлення логічних областей програми. Оператор – це команда мови, яка виконує будь-яку дію (перевірка умови, організація циклу та ін.) Ідентифікатор – це ім'я, що вільно обирається програмістом для елементів програми. Тип даних – це характеристика ідентифікатора, що визначає безліч значень, які він може набувати (цілі чи дробові числа, рядки символів, логічні вирази та ін.). 5 ЗАГАЛЬНА СТРУКТУРА ПРОГРАМИ Program Ім'я_програми; Uses розділ модулів, що підключаються; Label розділ опису міток; Const розділ опису констант; Type розділ опису власних типів даних; Var розділ опису змінних; Begin Основне тіло програми; End. Мінімальний код: 6 ВИСНОВОК НА ЕКРАН Для виведення інформації на екран, використовуються оператори: Write або Writeln. F9 – Компіляція + перевірка Ctrl+F9 – Запуск F9 → Ctrl+F9 – уникнення помилок Відображення результатів виконання програми 7 ВИСНОВОК НА ЕКРАН Результат застосування операторів: WRITE «Порожній» оператор WRITELN додає порожній рядок WRITELN 8 ВПРАВИ Виведіть інформацію на екран так, як нижче Hello! Nice to see you! Call me computer. Матеріал, що використовується: Оператори виведення: Write, WriteLn «Порожній» оператор WriteLn; вставляє порожній рядок. 9 ПІДКЛЮЧЕННЯ ДОДАТКОВИХ МОДУЛІВ Додаткові модулі розширюють можливості ваших програм шляхом введення додаткових операторів. Модулі підключаються до розділу Uses. Program My; Uses Модуль1, Модуль2; ________________________ ________________________ ________________________ ________________________ МОДУЛЬ 1 Набір ресурсів 1 … МОДУЛЬ N Модулі: Системні Власні Набір ресурсів N Очистка текстового екрана Очікування натискання на клавішу Підключений модуль з ім'ям CRT 10 ВИХІД Y Y координата знайомства на екрані. X може набувати значень від 1 до 80, а Y від 1 до 25. Наприклад: Program My_program; (Підключення модуля) Uses Crt; Begin (Очищення екрана) ClrScr; (Виведення даних) GotoXY(1, 1); write("▒"); GotoXY(80, 1); write("▒"); GotoXY(1, 25); write("▒"); GotoXY(80, 25); write("▒"); (Затримка екрана) ReadKey; End. Програма виводить на кутах екрана символ “▒” (код 177). 11 ВИСНОВОК У КВІТІ TextColor (Color); Визначає колір символів. TextBackground (Color); Визначає колір знайомства. Program MyProgram; Uses Crt; Begin TextColor(Red); TextBackGround(Blue); Write("На дворі"); TextColor(White); Write("трава,"); TextColor(Green); TextBackGround(Yellow); Write("на траві"); TextBackGround(Magenta); Write("дрова. »); End. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 фіолетовий – коричневий – світло-сірий – темно-сірий – блакитний – світло-зелений – світло-ціановий – рожевий – світло-бузковий – жовтий – білий РОБОТА З ДАНИМИ РОБОТА З ДАНИМИ ЗНАЧЕНЬ Операції з даними ІДЕНТИФІКАТОРИ Термін ідентифікатор застосовується до константів, змінних, функцій, процедур, компонентів та інших об'єктів, що визначаються користувачем.. Дозволені символи: латинські літери; цифри; не можуть складатися з декількох слів, не можуть збігатися з будь-яким із ключових слів. . Помильні ідентифікатори: Дані My name 2Array Var ( ( ( ( Використовуються російські символи ) Є пробіл ) Починається з цифри ) Збігається з ключовим словом ) 15 ТИПИ ДАНИХ Тип даних - це характеристика ідентифікатора, що визначає безліч значень, які він може приймати ( числа, рядки символів, логічні вирази та ін.). 16 ЦІЛИЙ ТИП ДАНИХ 17 Кінцевий набір можливих значень тип byte shortint word integer longint діапазон 0..255 -128..127 0..65535 -32768..32767 -2147483648..2147 ! Вихід за межі діапазону призводить до помилки! Розм ОГОЛОШЕННЯ ЗМІННИХ Змінна – це ідентифікатор, здатний зберігати будь-яке значення (число, рядок тощо) та змінювати його у процесі роботи програми. Синтаксис: Var<имя переменной> : <тип переменной>; Program Ім'я_програми; Uses розділ модулів, що підключаються; Var розділ опису змінних; Begin Основне тіло програми; End. Зарезервоване місце в пам'яті комп'ютера під 3-х змінних 18 ЗАВДАННЯ ЗНАЧЕНЬ ЗМІНИМ Для завдання значення змінної, необхідно скористатися оператором присвоєння:= Синтаксис запису:<Переменная> := <Значение>; У змінну (цілочисленну) з ім'ям А заноситься значення 3 19 ОПЕРАЦІЇ З ЦІЛИМИ ЗМІННИМИ 20 Арифметичні операції: + - * / Стандартні операції: div | mod | sqr Не можна використовувати з цілими типами У змінну з ім'ям S заноситься сума значень, які зберігаються в змінних X і Y Значення, що зберігається в змінній з ім'ям S виводиться на екран ВПРАВА 21 1. Напишіть програму, яка виводить на екран результат множення чисел 15 і 2 2. Напишіть програму, яка виводить на екран значення функції f 2 x 3 y , при x=11, y=3 Використовуваний матеріал: Змінні оголошуються в розділі Var Цілий тип називається Integer Синтаксис присвоєння змінної значення:<Переменная> := <Значение> ; Після кожного оператора ставиться знак; (крім begin та останнього end) РЕЧОВИННИЙ ТИП ДАНИХ Безліч значень √ √ Порядковий тип Речовий тип Одностороння сумісність: Речовий Цілий Цілий Речовинний! Вихід за межі діапазону та недотримання правил сумісності призводить до помилки! 22 ОПЕРАЦІЇ З РЕЧОВИНИМИ ЗМІННИМИ 23 Стандартні операції: pi | Sqrt | Sin | Cos | Abs | Exp | Ln Round | Trunc (речовий → цілий) Наприклад (X, S – тип Real): X:= pi/3; S:= Sin(X) * 100; Write (Round(S)); У змінну з ім'ям S заноситься відношення значень, які зберігаються в змінних X та Y Позиція числа та число символів у дробовій частині числа E – позначає ступінь числа. 5.6E-5 = 5.6·10-5 РЯДКОВИЙ ТИП ДАНИХ 24 Рядки – впорядкований набір символів. Рядки укладені в апострофи. Рядки не сумісні з цілими та речовими типами. Тип Діапазон String 255 символів (Основні оператори для рядків) + (конкатенація) Length (S); ( Довжина рядка ) Наприклад: X: = 'Вася'; Write('У вашому імені', Length(X), 'літер.'); S: = X; X: = S; ВПРАВА Напишіть програму, яка виводить на екран результат розподілу чисел 12.89 та 0.22 з відображенням лише трьох значущих цифр після коми у наступному форматі: перше число поділити на друге число = результат Write (X:1:3, ' razdelit na ', y:1 :3, ' = ' z:1:3) Використовуваний матеріал: Строковий тип називається String Рядки укладаються в опострафи Конкатенація рядків відбувається через знак + В операторі виведення на екран, різні типи відокремлюються комою 25 ВВЕДЕННЯ ДАНИХ З КЛАВІАТУРИ 26 Для того, щоб ввести інформацію з клавіатури необхідно скористатися оператором введення: Read або ReadLn. Синтаксис: Read (N1, N2, … Nn); Де N1, N2, … Nn – змінні (цілі, речові, рядкові) У змінну Х, заноситься значення, введене з клавіатури Після введення значення, необхідно натиснути клавішу Enter Якщо змінних в операторі вказано кілька, то вони вводяться через пробіл, або через натискання клавіші Enter ВПРАВА 27 1. Напишіть програму міні-калькулятор, яка обчислює суму двох чисел, введених з клавіатури. 2. Напишіть програму, яка запитує, як Вас звуть, а після того, як Ви напишіть своє ім'я, виводить вітання. Наприклад, якщо Ви ввели ім'я Ваня, то програма виведе фразу: Привіт, Ваня! Використовуваний матеріал: Оператори введення: Read, ReadLn ОПЕРАТОРИ УМОВНИЙ ОПЕРАТОР 29 Умовний оператор реалізує «розгалуження», тобто змінює порядок виконання операторів залежно від істинності чи хибності певної умови. Перевірка умови НІ Дія 1 Піду на пляж Іде дощ ТАК Дія 2 Візьму парасольку Дія 3 Піду в кіно ПЕРЕВІРКА УМОВ Операції порівняння: > - більше< - меньше = - равно >= - більше чи одно<= - меньше или равно <>- не одно 30 Логічні операції: Not And Or - Не -І - Або Наприклад: Якщо Мій зріст > Зростання Петі, То я вище Петі Якщо (іде дощ) Або (йде сніг), То я залишусь вдома Якщо Не ((йде дощ) ) І (вітер)), То я піду гуляти При використанні логічних операцій, умови полягають у дужки СИНТАКСИС ЗАПИСУ УМОВНОГО ОПЕРАТОРА Коротка форма: If<условие>then<оператор>; Наприклад, якщо в змінній Х значення менше 0, тоді в цю ж змінну записується значення 1: If X<0 Then X:= 1; Полная форма: If <условие>then<оператор_1>else<оператор_2>; Наприклад: If X>5 Then X: = X - 1 Else X: = X + 1; Після слів Then та Else можна використовувати лише один оператор Перед словом Else, знак; відсутня 31 ВПРАВА 32 1. Напишіть програму, яка отримує на вхід суму в доларах та суму в євро, а потім виводить на екран у якій валюті сума більша (1 долар=28 руб., 1 євро=35 руб.) 2. Напишіть програму , Що отримує на вхід три числа, а потім виводить на екран максимальне з них. Матеріал, що використовується: Форми запису умовного оператора: If<условие>Then<оператор>; If<условие>Then<оператор_1>Else<оператор_2>; Перед Else знак; не ставиться Операції порівняння: >< = <> >= <= Логические операции: Not Or And ОПЕРАТОРНЫЕ СКОБКИ Если после слов Then или Else необходимо записать несколько операторов, то их заключают в операторные скобки (составной оператор). Операторные скобки начинаются словом Begin, а заканчиваются словом End; Например: If Z >0 Then Begin X: = 1; Y:=-1; WriteLn('Інформація прийнята'); End Else WriteLn('Помилка'); 33 ОПЕРАТОР ВИБОРУ CASE Оператор вибору використовується для заміни конструкцій із вкладених умовних операторів. Синтаксис запису Case<порядковая_переменная>of<значение_1> : <оператор_1> ; <значение_2> : <оператор_2> ; ……… <значение_N> : <оператор_N>Else<оператор_N+1>; End; В операторі вибору можна використовувати операторні дужки Не обов'язковий рядок 34 ОПЕРАТОР ВИБОРУ CASE Case Зростання учня of 16..30: Ви учень початкових класів; 31,32,33: Ви навчаєтесь у класі 5-6; 34..50: Ви старшокласник Для перерахування значень використовується кома, для вибору діапазону – двокрапка Else Ви явно не учень; End; Case x of -128..-1: writeln('Негативні'); 0: writeln ( ' Нуль '); 1..127: writeln('Позитивні') Else WriteLn('Вихід з діапазону'); End; 35 ВПРАВА Напишіть програму, яка отримавши число, виводить на екран відповідний день тижня. Наприклад, ввели число 2, програма має вивести вівторок. Якщо число виходить за межі 1.7, то має бути виведене повідомлення, що такого дня немає. Матеріал, що використовується: Оператор вибору: Case<порядковая_переменная>of<значение_1> : <оператор_1> ; ……… <значение_N> : <оператор_N>; Else<оператор_N+1>; End; 36 ЦИКЛИ 37 Циклічними називаються алгоритми, у яких виконання деяких операторів здійснюється багаторазово з тими самими модифікованими даними (наприклад, процедура множення чисел через їх багаторазове складання). У мові Паскаль є три оператори циклу: For (цикл із параметром чи задане число повторень) While (цикл ПОКА) Repeat (цикл ДО) Якщо число повторень відомо, краще скористатися оператором циклу з параметром. ЦИКЛ З ПАРАМЕТРОМ 38 Цикл на задану кількість повторень зі зростаючим або спадним значенням параметра For (парам) := (поч_зн) To (кон_зн) Do (оператор) ; Тіло циклу Примітки Параметр – тип; У циклі можна використовувати операторні дужки; У тілі циклу не можна змінювати параметр циклу; Параметр циклу зростає на одиницю; Початкове значення > кінцевого, інакше тіло циклу ігнорується; Для зменшення параметра за місце To використовувати DownTo. ЦИКЛ З ПАРАМЕТРОМ 39 Написати програму, яка запитує цілі числа (a, b), причому a := <нач_зн>To<кон_зн>Do<оператор>; Параметр – цілий тип (зазвичай, Integer); У циклі можна використовувати операторні дужки; Параметр циклу збільшується на одиницю 40 ЦИКЛ WHILE («ПОКИ») Цикл While спочатку перевіряє умову, і тільки якщо вона справді виконує тіло циклу. While (умова) do (оператор); У тілі коду, написаному нижче цикл не виконатись жодного разу: x:=1; While x>1 do x:=x-1; Можна отримати нескінченний цикл. Наприклад: x:=1 While x>0 do х:=х+1; 41 ЦИКЛ WHILE («ПОКИ») Програма виведення на екран суми чисел від a до b. While not keypressed do begin Delay(2000); End; Цикл працює, поки змінна змінна f не стане більше значення b 42 ВПРАВА 43 1. Космонавти вирішили на місяці садити берези, причому щороку збільшувати кількість берез в два рази, в перший рік посадили 3 берези. Виведіть на екран через, скільки років число берез перевищить 10 000. 2. Напишіть програму, яка визначає максимальне із введених чисел з клавіатури (введення чисел закінчується числом 0). Нижче наведено рекомендований вигляд екрана: Введіть числа. Для завершення введення введіть 0. 89 15 0 Максимальне число 89. Використання матеріалу: Оператор циклу While: While<условие>do<оператор>; Цикл While спочатку перевіряє умову, і лише якщо вона справді виконує основне тіло циклу. ЦИКЛ REPEAT («ДО ТИХ ПІР») 44 Цикл Repeat спочатку виконує тіло циклу, а потім перевіряє умову Repeat (тіло_циклу) Until (умова); Немає потреби у циклі Repeat використовувати складовий оператор, т.к. Ця конструкція передбачає виконання не одного, а кількох операторів, укладених між словами Repeat та Until. ЦИКЛ REPEAT («ДО ТИХ ПОР») Програма виведення на екран суми чисел від a до b. Цикл працює, поки змінна змінна f не стане більше значення b 45 ПОРІВНЯННЯ ЦИКЛІВ For While Repeat 46 Вибір моделі циклу залежить лише від зручності його використання в конкретній ситуації. Ми практично завжди можемо замість одного-го виду циклу скористатися іншим. Використовуваний матеріал: Оператор циклу Repeat: Repeat<тело_цикла>Until<условие>Цикл Repeat спочатку виконує тіло циклу, а лише потім перевіряє умову 47 ПЕРИВАННЯ ЦИКЛІВ 48 Для гнучкого управління циклічними операторами використовуються процедури: Break - вихід із циклу; Continue – завершення чергового проходу циклу; Приклади: Знайти мінімальне число i, для якого сума чисел від 1 до i більше 100. Як тільки s (сума чисел від 1 до i) стає більше 100 спрацьовує оператор break і відбувається вихід із циклу. s:=0; for I:= 1 to 100 do begin if s>100 then break; s: = s + i; end; Writeln ( 'мінімальне число i, таке, що (1+2+..+i)>100 дорівнює ',i); З клавіатури вводяться 10 чисел і циклі вважається сума лише позитивних. Якщо число є негативним, то виконується оператор continue, який починає наступний прохід циклу. s:=0; for I:= 1 to 10 do begin Readln (k); if k<0 then Сontinue; s:= s + k; end; Writeln (‘Сумма положительных чисел равна ’,s); МАССИВЫ МАССИВЫ 50 Простые типы: одна переменная – одно значение Структурированные типы: одна переменная – несколько значений Массив – это фиксированное количество значений одного типа. Доступ к конкретному значению осуществляется через индекс. Переменная массива Структура массива: A= Доступ к массиву: 0 1 2 3 Индекс 9 7 0 0 Значения <Имя массива> [ <Индекс>] A: = 7; МАСИВИ Масив оголошується в розділі Var: (Ім'я) : Array [ (поч_зн) .. (кон_зн) ] of (тип) ; Приклади оголошення масивів: Var A: Array of String; B: Array of Real; З: Array of Integer; Приклади заповнення масивів значеннями: A: = 'Вася'; A:='Петя'; A:='Маша'; A:='Олеся'; Write (A); For f:=1 to 10 do C[f]:= f*2; For f:=1 to 10 do WriteLn (C[f]); 51 ВПРАВА 52 Напишіть програму, яка запитує у користувача 7 цілих чисел і заносить їх у масив. У масиві міститься максимальний елемент і відображається на екрані. Наприклад: Введіть 1 число: 4 Введіть 2 число: 8 Введіть 3 число: 9 Введіть 4 число: 2 Введіть 5 число: 4 Введіть 6 число: 5 Введіть 7 число: 0 Максимальне число: 9 Використовуваний матеріал: Оголошення масиву:<Имя>: Array [<нач_зн> … <кон_зн>] of<тип>; Доступ до масиву:<Имя массива> [ <Индекс>] ГЕНЕРАТОР ВИПАДКОВИХ ЧИСЕЛ (ГСЧ) Для генерації у програмі випадкових чисел використовують наступні оператори: Randomize – ініціалізація ГСЧ. Оголошується лише на початку програми; Random – генерує випадкове число від 0 до 1 (речовий тип); Random (N) – генерує довільне число від 0 до N-1 (цілий тип); 53 БАГАТОМІРНІ МАСИВИ 54 Список інтервалів для кожної розмірності масиву (Ім'я) : Array [ (поч_зн) .. (кон_зн) , (поч_зн) .. (кон_зн) , (і т.д.) ] of (тип) ; Приклад оголошення двомірного масиву (матриці, таблиці) на 4 рядки та 6 стовпців: Var A: Array of Integer; Приклад заповнення масиву: For i:=1 to 4 do For j:=1 to 6 do A := i+j; Ai , j 2 3 4 5 3 4 5 6 4 5 6 7 5 6 7 8 6 7 8 9 7 8 9 10 ВПРАВА Напишіть програму, яка заповнює двовимірний масив випадковими числами від -10 до 20 і виводить суми елементів . Використовуваний матеріал: Ініціалізація ДСЛ: Randomize Випадкове число від 0 до N-1: Random (N) 55 РОБОТА З ФАЙЛАМИ РОБОТА З ФАЙЛАМИ 57 Файл: Початок файлу Покажчик [email protected]$ku⌂|"Hd9v*9(L*M=BYGRMxduВ █ 8e*ВOtCDrTVzHGJ1aBD>@Б\(r8sE) █ :wcJvAmRa"v/.Wai;$`SWI=y2]suB █ ?Hq>vF(LmBc .6b]o(QkВ8 █ cu<6`8Z":M^1;:8ANwak;,b2-4…u5 █ 2]suB?Hq>vF(LmBcAdz4wcP]o(QkВ █ 8c8df]e"v,su>+),VAEFБjFV,W$Q-█ y0G1GjN$-eБ|sqZ0`QnВ%\БD%y █ █ █ - ознака кінця рядка █ - ознака кінця файла Змінна Створення, читання, запис, закриття РОБОТА З ФАЙЛАМИ Послідовність дій при роботі з файлами: 1. Оголошення файлової змінної (ФП), 2. Асоціація ФП з файлом, 3. Відкриття файлу для читання/запису, 4. Операції з 5. Закриття файлу (так само розривається зв'язок між файлом і ФП) 1. Оголошення ФП<Имя>: File of<тип> ; <Имя>: Text; Var f: Text; h: File of Integer; 2. Асоціація ФП із файлом Assign (<ФП>, <имя файла>); Assign (f, 'c:\my\Data.ghm') 58 РОБОТА З ФАЙЛАМИ 3. Відкриття файлу для читання/запису Reset (<ФП>); - відкриває файл для читання Rewrite (<ФП>); - відкриває файл для запису 4. Операції з файлом Read (<ФП>, <П1> , <П2>, …); - зчитує до змінних<П1>, <П2>і т.д. по одному елементу з позиції покажчика. Write (<ФП> , <П1> , <П2>, …); - записує у файл значення змінних<П1>, <П2>і т.д. по одному елементу з позиції покажчика. EoLn (<ФП>); - повертає True, якщо досягнуто кінця рядка. EoF (<ФП>); - повертає True, якщо досягнуто кінець файлу. 5. Закриття файлу Close (<ФП>); 59 РОБОТА З ФАЙЛАМИ Спростіть програму, якщо відомо, що матриця розміром 5x5 (використовуйте цикл For) 60 ВПРАВА 61 Напишіть програму «ДОМ-3». У першому файлі містяться імена учасників у називному відмінку. У другому, ті самі імена, але в знахідному. У третьому – список висловлювання почуттів чи якась дія (любить, не любить, цілує, хоче вкусити, обожнює, поважає, ненавидить, хоче бачити, обіймає). Програма повинна випадково брати інформацію з цих файлів та створювати новий за таким принципом:<имя в им. пад> <чувство/действие> <имя в вин. пад> Ольга любить Сергій Олег хоче бачити Романа Катя поважає Настю І т.д. Матеріал, що використовується: Назва операторів: Assign, Rewrite, Reset, Write, Read, Close. Графіка Графіка Для роботи з графікою Pascal необхідні два файли - модуль graph.tpu і драйвер графічного адаптера egavga.bgi. Перший знаходиться в каталозі \UNITS, а другий - \BGI. ! Драйвер egavga.bgi. Необхідний під час роботи exe файлу! Щоб малювати, треба: 1. підключити модуль GRAPH (у розділі Uses); 2. ініціалізувати графіку (InitGraph); 3. щось намалювати; 4. закрити графічний режим (CloseGraph) 63 ГРАФІКА Ініціалізація графічного режиму Малювання лінії. Перо переходить з точки (0,0) до точки (639, 479). PROGRAM Primer_1; Uses Graph, crt; Var Gd, Gm: Integer; BEGIN Gd:=0; InitGraph (Gd,Gm,'d:\BP\bgi"); Line (0,0,639,479); ReadKey; CloseGraph; END. 639 пікс. Система координат 479 пікс. 64 Закриття графічного режиму ВПРАВИ трикутник 2. Зобразити в центрі екрану прямокутник зі сторонами в двоє меншими, ніж відповідні сторони екрана Використовуваний матеріал: Графічний модуль: Graph Ініціалізація графіки: InitGraph Закриття графічного режиму: CloseGraph; ГРАФІКА + КОЛІР SetColor(Color:Color: word; Повертає колір пера SetBkColor(color: word);Встановлює колір фону.GetBkColor:word; – червоний – бузковий – коричневий – світло-сірий – темно-сірий – блакитний – світло-зелений – світло-ціановий – рожевий – світло-бузковий – жовтий – білий ГРАФІЧНІ ПРИМІТИВИ Line (x, y); Рисує лінію від поточної координати пера до координат (x, y). MoveTo (x, y); Встановлює перо координати (x, y). PutPixel (x, y, Color); Малює точку з координатами (x, y) кольором Color. GetPixel (x, y): слово; Повертає колір точки з координатами (x, y). Rectangle (x1, y1, x2, y2); Будує контур прямокутника. Circle (x, y, r); Малює коло з центром (x, y) і радіусом r. SetLineStyle (Ln, 0, T) Змінює параметри контуру. Ln – стиль лінії (0..3): 67 x1, y1 T – товщина лінії: 1 = нормальна; 3 = товста. FillEllipse (x, y, Xr, Yr); Малює зафарбований еліпс з центром (x,y) і радіусами Xr та Yr. SetFillStyle (Type, Color); Встановлює тип (0..11) та колір штрихування замкнутих фігур ClearDevice; Очищає графічний екран, зафарбовуючи його в поточний колір фону x2, y2 ГРАФІЧНІ ПРИМІТИВИ 68 1. Напишіть програму, що малює на екрані монітора будиночок; 2. Напишіть програму, яка на екрані монітора малює зоряне небо з зірками випадкового радіусу (від 1 до 5 пікс.) та випадковим розташуванням. Колір теж випадковий (білий, світло-сірий, темно-сірий); Матеріал, що використовується: SetColor (Color: word); - встановлює колір малювання SetBkColor (color: word); - Встановлює поточний колір тла. Line (x, y); - Чортить лінію від поточної координати пера до координат (x, y). MoveTo (x, y); - Встановлює перо координати (x, y). PutPixel (x, y, Color); - Малює точку з координатами (x, y) кольором Color. Rectangle (x1, y1, x2, y2); - Будує контур прямокутника із ліній поточного кольору. Circle (x, y, r); - Малює коло з центром (x, y) і радіусом r. FillEllipse (x, y, Xr, Yr); - Малює зафарбований еліпс з центром (x,y) і радіусами Xr і Yr. ГРАФІКА + АНІМАЦІЯ Пауза у мСек. 70 ПІДПРОГРАМИ ПІДПРОГРАМИ Підпрограми дозволяють виділяти повторювану частину коду в окремі фрагменти і вставляти з потрібні місця програми. Функція, на відміну від процедури, повертає результат виклику. Процедури Опції Підпрограми: пишуться між ключовими словами Begin End; ідентифікуються за іменами, що пишуться за правилами завдання ідентифікаторів; можуть мати вхідні та вихідні параметри; Повністю повторюють структуру основної програми. 72 Program My; Підпрограма 1 [Код підпрог-ми 1] Підпрограма 2 [Код підпрог-ми 2] Begin Підпрограма 2 Підпрограма 1 Приклад системних підпрограм: Write(“Ок”); ClrScr; Length (S); Random; // // // // процедура з одним параметром процедура без параметрів функція з одним параметром функція без параметрів Підпрограма 2 End. ПІДПРОГРАМИ (ППР) Вкладеність підпрограм Програма Підпрограма 1 Підпрограма 3 Підпрограма 4 Підпрограма 2 73 Область доступності змінних Змінні, описані в деякій ППР, відомі в межах її тіла, ВКЛЮЧА і всі вкладені ППР (змінна описана в ППР1 . Імена змінних, описаних у ППР, можуть збігатися з іменами змінних з інших ППР (у кожному з ППР може бути оголошена однакова змінна). Ім'я змінної, описане в ППР, екранує однойменні змінні з ППР, що охоплюють даний (якщо ППР1 і ППР3 оголошені однакові змінні, то кожної ППР ці змінні будуть унікальні). Змінні програми називаються глобальні, а змінні підпрограм – локальні. ПРОЦЕДУРИ БЕЗ ПАРАМЕТРІВ Синтаксис запису: Procedure (ім'я процедури); (розділ змінних, констант, типів, міток, модулів) Begin (Тіло процедури); End; Приклад використання процедури без параметрів: 74 ПРОЦЕДУРИ БЕЗ ПАРАМЕТРІВ Приклад екранування однойменних змінних: Program My_program; Uses Crt; Var A:String; // Опис процедури Procedure My_Procedure; Var A:String; Begin A:= "Підпрограма"; Writeln(A); End; Begin A:= "Тіло"; Writeln(A); My_Procedure; Writeln(A); End. // Виклик процедури 75 ПРОЦЕДУРИ З ПАРАМЕТРАМИ 76 Для того, щоб підпрограми були більш універсальними, застосовуються спеціальні механізми обміну даними між програмою та її підпрограмами. Системні процедури із параметрами: SetColor (Red); ( Процедура з Rectangle (0, 0, 639, 479); ( Процедура з InitGraph (Gd,Gm,'d:\BP\bgi"); ( Процедура з ( параметрами одним параметром ) кількома параметрами ) декількома різнотипними ) ) Синтаксис запису процедури з параметрами Procedure (Ім'я) ((Область вхідних змінних) Var (Область вихідних змінних (для кожної змінної свій Var))); Структура областей: Змінна_1, Змінна_2, … : Тип; ............. Змінна_N-1, Змінна_N, … : Тип: Будь-яка з областей може бути відсутні ПРОЦЕДУРИ З ПАРАМЕТРАМИ Використання вхідних параметрів Процедура малювання екрана прямокутника, що облямовує, заданого кольору Без параметрів З параметрами Procedure Cir; SetColor (i); SetBkColor (b); Rectangle (0, 0, 639, 479); End; Procedure Cir (i, b:Integer); 639, 479), End, Виклик процедури у програмі: Виклик процедури у програмі: i:=6;b:=12;Cir;Cir(6,12);77 ПРОЦЕДУРИ З ПАРАМЕТРАМИ Використання вихідних параметрів ра перетворення кута із градусного заходу на радіану. PROGRAM EX_26_3; VAR x,a: real; PROCEDURE Rad(alfa: real; var betta: real); (Вихідна змінна) BEGIN Betta: = pi * alfa / 180; END; BEGIN Write("Введіть кут у градусах: "); Readln(x); Rad(x, a); (Виклик процедури) Writeln("Йому дорівнює кут у радіанах = ",a:6:4); END. 78 ВПРАВА 79 1. Напишіть процедуру, яка малює трикутник, у такому форматі: Triangle (x1,y1, x2,y2, x3,y3, Color) 2. Напишіть процедуру обчислення площі прямокутника у такому форматі: SRect (a, b, S) де S – вихідний параметр процедури. Використовуваний матеріал: Procedure (Ім'я) ((Область вхідних змінних) Var (Область вихідних змінних)); Структура областей: Змінна_1, Змінна_2, … : Тип; ........................ Змінна_N-1, Змінна_N, … : Тип; ФУНКЦІЇ 80 Синтаксис запису функції Function ((Область вхідних змінних) Var (Область вихідних змінних)): (Тип); Оформлення процедури Оформлення функції Procedure S(a, b: real; var s: real); Begin s:= a+b; End; Function Sum (a, b: real): real; Begin Sum:= a+b; End; виклик процедури виклик функції S(10, 20, A); Write (A); A:= S(10, 20); WriteLN (A); WriteLN (S(20, 30)); Оформляти деяку підпрограму як функцію доцільно лише тому випадку, якщо очікується певний результат її роботи. Якщо підпрограма орієнтована лише виконання певної послідовності дій (висновок на екран, малювання тощо.), краще оформити її як процедуру. ВПРАВА Напишіть функцію обчислення площі прямокутника у такому форматі: SRect (a, b) Використовуваний матеріал: Function (Ім'я) ((Область вхідних змінних) Var (Область вихідних змінних)): (Тип) ; Структура областей: Змінна_1, Змінна_2, … : Тип; ........................ Змінна_N-1, Змінна_N, … : Тип; 81 МОДУЛІ 83 Модуль (UNIT) - самостійна програмна одиниця, ресурси (процедури та функції) якої можуть бути використані іншими програмами. Program My1; Uses Модуль1, Модуль2; __________________________ __________________________ __________________________ __________________ МОДУЛЬ 1 Набір ресурсів 1 … Program My2; Uses Модуль1, Модуль2; __________________________ __________________________ __________________________ __________________ МОДУЛЬ N Набір ресурсів N Модулі підключаються до програми через розділ USES МОДУЛІ. СТРУКТУРА 84 Модуль складається з наступних частин: 1. Заголовок модуля. 2. Інтерфейсна частина. (Опис видимих ​​об'єктів) 3. Реалізаційна частина. (Опис прихованих об'єктів) 4. Ініціалізаційна частина (не обов'язкова). Unit (Ім'я модуля); Interface ( Розділ глобальних змінних, констант, типів) ( модулів ) ( Список заголовків процедур та функцій ) Implementation ( Розділ локальних змінних, констант, типів) ( Реалізація процедур та функцій ) Begin (Частина ініціалізації ) End. ! Ім'я заголовка модуля повинне співпадати з ім'ям файлу модуля! Модуль Приклад модуля: Unit My_Unit; Interface Var ms: Array of Real; (Глобальний масив) Function Cub(x:integer):Integer; (Функція Cub = x^3) Function ext4(x:integer):Integer; (Функція ext4 = x^4) Implementation Function Cub(x:integer):Integer; (Реалізація функції Cub) Begin Cub: = x * x * x; End; Function Ext4(x:integer):Integer; (Реалізація функції ext4) Begin Ext4: = x * x * x * x; End; End. 85 ВПРАВА 86 Напишіть модуль однією функцією та однією процедурою: ( Функція обчислення X1=1/x ) X1(a:real):real; ( Процедура друку на екрані слова S, в позиції X, Y WriteXY(S:String; X,Y:Iteger); Використовуваний матеріал (структура модуля): Unit (Ім'я модуля); Interface (Розділ глобальних змінних, констант, типів) ( модулів ) ( Список заголовків процедур та функцій ) Implementation ( Розділ локальних змінних, констант, типів) ( Реалізація процедур та функцій ) Begin (Частина ініціалізації ) End.

Тема уроку: «Цикли (повтор) у програмах»

1)Повторити і закріпити знання складання лінійних, розгалужуваних програм; 2) Навчитися складати програми, використовуючи циклічний оператор - FOR i: = 1 TO n DO Begin оператори (тіло циклу) end; 3) Застосовувати оператори у вирішенні типових завдань. Мета уроку:

Вставте пропущене: Program Sql; Var A, B, C, D, XI, Х2: ??? ; Begin Writeln ("Введіть коефіцієнти квадратного рівняння '); Readln (???); D:=B*B-4*A*C; If D

Питання групі: 1)У чому відмінність програм із розгалуженням від лінійних? 2) За допомогою яких операторів здійснюється вибір у програмах? 3) begin….end - Що це? Які правила використання у програмі?

1) Оператори Введення/виводу; 2) Оператори вибору; 3) а:=а+3 – що станеться? 4) Перерахувати типи даних; 5) Прибрати зайве AND, OR, END, NOT, IF; 6); - що означає? 7) Як позначається кінець програми? 8) Перерахувати арифметичні операції. 9) Чому дорівнює 120 mod 65 =? 10) Оператори циклу.

Розставте відповідно: 1. Read 2. End 3. Begin 4. Integer 5. ; 6. If .. Then 7. := 8. Введення 9. Кінець 10. Цілі 11. Привласнити 12. Наступна дія 13.Початок 14.Якщо..то

Чи дійсно результат менший за 3? a:= 7 b:= - 10 a:=a*(- 7) b:=159 a:=b+a

Знайдіть 5 помилок у програмі: Program krug; VAR Pi, r, S: real; Pi:=3.14, WRITELN('vvedite radiuc r='), READ(r); S = Pi * r * r; WRITELN('Ploshad kruga S= ', S) end

Program krug; VAR Pi, r, S: real; begin Pi:=3.14 , WRITELN('vvedite radiuc r=') , READ(r); S: = Pi * r * r; WRITELN ( 'Ploshad kruga S = ', S) end .

Завдання №1 Дане ціле N, визначити чи є воно парним чи непарним. 2, 4, 6, ... - парні, т.к. діляться без залишку на 2 (N mod 2 = 0) 1, 3, 7, … - непарні, т.к. діляться на 2 із залишком 1(N mod 2 =1)

Алгоритм Алгоритм Chislo; перем N: цілі; початок Висновок('vvedite chislo'); Введення (N); Якщо N mod 2 = 0 Т O Висновок (N, '- chetnoe'); Якщо N mod 2 = 1 Т O Висновок (N, '- nechetnoe'); кінець.

Завдання № 2 Дане ціле двозначне число N (DE), де D – кількість десятків, Е – одиниць. Чи визначатиме чи сума цифр цього числа дорівнює 10. Приклад: у 28-ми сума S =2+8=10 – буде, а у 27-ми S=2+7=9 не будемо рахувати десятки: D= N div 10 , А одиниці: E = N mod 10

Алгоритм Алгоритм Chislo; перем N,E,D,S: цілі; початок Висновок('vvedite chislo'); Введення (N); E:=N mod 10; D:=N div 10; S:=E+D; ЯКЩО S = 10 Т O Висновок ('summa= 10') Інакше ('summa10'); кінець.

Визначення: Програми у яких багаторазово повторюються однотипні дії – циклічні програми (з повтором).

Завдання: Дано 100 натуральних чисел від 1 до 100 (1,2,3, … 99,100) Порахувати їхню суму та вивести в змінну S.

Алгоритм сума; Перем i, S: цілі; Початок S: = 0; Для i:=1 до 100 повторювати Початок S:= S + i тіло Кінець; циклу Висновок (S) Кінець.

Program summa; VAR i, S: integer; Begin S:=0; FOR i:=1 TO 100 DO begin S:=S+i тіло end; циклу WRITE(S) end.

Program summa; VAR i, S: integer; Begin S:=0; FOR i:=1 TO 100 DO begin S:=S+i; тіло WRITE('S', i, '=', s) циклу end; end.

Тіло циклу – ті дії, які потрібно багаторазово повторювати. Тіло циклу укладаємо в операторні дужки begin….. end;

ALT + F9 – виправлення помилок CTRL + F9 – запуск програми ALT + F5 – перегляд результату

Задача: 1) Вивести стовпець таблиці множення будь-якого цілого числа N на числа від 1 до 10. Приклад: N =5, то стовпець буде такий- 1*5=5 2*5=10 3*5=15 i * N = P , де i змінюється від …….. 1…10 10*5=50

Домашнє завдання: прокоментувати програму для завдання «Про стовпець таблиці множення»

ДЯКУЮ ЗА УВАГУ!

  1. 1. Pascal
  2. 2. Pascal Паскаль був розроблений швейцарським ученим Ніклаусом Віртом. Паскаль вважається найважливішим інструментом для навчання методам структурного програмування та з 1983 р. введений у навчальні курси у школах для учнів, що спеціалізуються у галузі інформатики. Надалі мова Паскаль удосконалювався і набув нових властивостей, відмінних від авторського варіанту.
  3. 3. Мова Паскаль відносно проста у вивченні, досить зрозуміла і логічна і, будучи першою мовою програмування, що вивчається, привчає до хорошого стилю.
  4. 4. Як і природні мови, кожна мова програмування має свій стиль та свої правила. Синтаксис мови програмування – це набір правил, які визначають способи побудови правильних програм із алфавіту.
  5. 5. Алфавіт мови Паскаль.<> < > <= >= := @ обмежувачі (розділювачі): . , " () (. .) ( ) (* *) .. : ; специфікатори: ^ # $
  6. 6. Структура програми (1. заголовок програми) program Ім'я_Програми; (2. розділ вказівки використовуваних модулів) uses Список_Використовуваних_Модулів; (3. Розділ описів) label Описи_міток; const Опис_Констант; type Описи_Типів; var Описи_Змінних; procedure Описи_Процедур_і_функцій; function exports Опис_Експортованих_Імен; (4. Розділ операторів) begin Оператори end.
  7. 7. Спрощена структура програми (1. заголовок програми) program Ім'я_Програми; (2. розділ вказівки використовуваних модулів) uses Список_Використовуваних_Модулів; (3. Розділ описів) const Опис_Констант; var Описи_Змінних; (4. Розділ операторів) begin Оператори програми end.
  8. 8. Команди мови програмування називаються операторами Розділювачем операторів у Паскалі є; (крапка з комою)
  9. 9. Коментар є фрагментом тексту програми, обмежений символами ( ). Коментарії у програмі виконують інформаційну функцію. (Моя перша програма) program first; begin writeln('Hello, World!') end.
  10. 10. Приклад: періметр прямокутника program perimetr; (заголовок програми) uses crt; (crt – необхідний очищення экрана) var a,b:integer; (Оголошення змінних) P:integer; Begin (початок програми) clrscr; (очищення екрана) a:=12; (Привласнюємо змінною а значення 12) b: = 7; (Привласнюємо змінною b значення 7) P:=2*(a+b); (значення виразу привласнюємо P) write("P = ",P); (Виводимо на екран значення P) end. (кінець програми)
  11. 11. Програма у своїй роботі має справу з даними. Деякі дані встановлюються ще до того, як програма почне виконуватися, а після її запуску зберігають свої значення незмінними протягом роботи програми. Це константи. Інші дані можуть змінюватись під час виконання програми. Вони називаються змінними.
  12. 12. Різниця між змінною та константою досить очевидна: під час виконання програми значення змінної може бути змінено, а значення константи немає. змінні змінні константи дані дані
  13. 13. Під змінною ми розумітимемо осередок («коробку»), куди комп'ютер може записувати («складати») дані. Під осередком ми насправді маємо на увазі «шматочок пам'яті», в якому зберігається інформація. Щоб скористатися інформацією, що зберігається в осередку, потрібно, щоб кожен осередок мав своє ім'я або, як часто кажуть, ідентифікатор. a b sum 5 3 8
  14. 14. Ідентифікатори. Іменами (ідентифікаторами) називають елементи мови – константи, мітки, типи, змінні, процедури, функції, модулі, об'єкти. Ідентифікатором є послідовність літер, цифр та знаків підкреслення, що починається з літери або символу підкреслення та не містить прогалин.
  15. 15. Ім'я може містити довільну кількість символів, але значущими є 63 символи. Не дозволяється в мові ПАСКАЛЬ використовувати як імена службові слова та стандартні імена, якими названі стандартні константи, типи, процедури, функції та файли. Приклади імен мови ПАСКАЛЬ: A b12 r1m SIGMA gamma I80_86
  16. 16. У Паскалі різниця між малими та великими літерами ігнорується, тому імена NaMe та name однакові.
  17. 17. Службове слово – це слово, яке у мові ПАСКАЛЬ має певне значення, яке може бути змінено. Іноді його називають ключовим словом.
  18. 18. Службові (зарезервовані) слова: ABSOLUTE EXPORTS LIBRARY SET ASSEMBLER EXTERNAL MOD SHL AND FAR NAME SHR ARRAY FILE NIL STRING ASM FOR NEAR THEN ASSEMBLER FORWARD NOT TO BEGIN FUNCTION OBJECTOT PRIVATE VAR DIV INDEX PROCEDURE VIRTUAL DO INHERITED PROGRAM WHILE DOWNTO INLINE PUBLIC WITH ELSE INTERFACE RECORD XOR END INTERRUPT REPEAT EXPORT LABEL RESIDENT
  19. 19. Пробіли не можна використовувати всередині здвоєних символів та зарезервованих слів. Існують імена, які називаються стандартними. sin cos real true На відміну від службових слів, зміст стандартних імен може бути перевизначений програмістом.
  20. 20. Ця вказівка ​​компілятору, скільки пам'яті необхідно зарезервувати для змінних нашої програми. У відкомпільованій програмі для всіх змінних відведено місце в пам'яті, і всім змінним надано нульові значення. Усі змінні, що використовуються в програмі, необхідно оголосити в розділі опису змінних після зарезервованого слова var. Оголошення змінних
  21. 21. Дані бувають різних типів...
  22. 22. Типи даних Імена стандартних типів є визначеними ідентифікаторами та діють у будь-якій точці програми. Вони описані в стандартному модулі System, який за замовчуванням підключається до списку модулів, що використовуються. Типи користувача – це додаткові типи (прості та структуровані) описані користувачем.
  23. 23. Стандартні типи даних 1. група цілих типів (Shortint, Integer, Longint, Byte, Word); 2. група дійсних типів (Single, Real, Double, Extended, Comp); 3. логічні (булевські типи) (Boolean, ByteBool, WordBool, LongBool); 4. символьний (Char); 5. рядковий (String); 6. вказівний (Pointer); 7. Текстовий тип (Text).
  24. 24. Група цілих типів Назва типу Тип діапазон значень необхідна пам'ять Коротке ціле зі знаком Shortint -128 .. 127 1 байт знака Byte 0 .. 255 1 байт Ціле без знаку Word 0 .. 65535 2 байти
  25. 25. Var b: byte; summa, count: integer; Оголошення змінних цілого типу summa: = -365; Використання
  26. 26. Числа у мові ПАСКАЛЬ зазвичай записуються у десятковій системі числення. Позитивний знак числа може бути опущений. Цілі числа записуються у формі без десяткової точки, наприклад: 217 -45 8954 +483
  27. 27. Група речових типів визначає дані, які реалізуються підмножиною дійсних чисел. Var A: real; begin... A:=0.65; … End.
  28. 28. Назва типу Тип Діапазон значень Кількість цифр мантиси Розмір (байт) Речове число одинарної точності Real 2.9e-39 .. 1.7e+38 11 6 Речове число Single 1.5e-45 .. 3.4e+38 7 4 Речове Double 5.0e-324 .. 1.7e+308 15 8 Речова кількість підвищеної точності Extended 3.4e-4932 .. 1.1e+4932 19 10 Ціле число у форматі речовинного Comp -9.2e+18 .8 9.2e
  29. 29. Дійсні числа записуються у формі з десятковою точкою або у формі з використанням десяткового порядку, що зображується буквою Е: 28.6 0.65 -0.018 4.0 5Е12 -1.72Е9 73.1Е-16
  30. 30. Булевського типу даних відповідає ідентифікатор Boolean. Змінні булевського типу мають розмір 1 байт та можуть містити значення TRUE або FALSE. Значення FALSE відповідає 0, будь-яке число відмінне від нуля вважається TRUE. Var knopka, flag: boolean; Begin knopka:=true;
  31. 31. Символьний тип відповідає стандартний ідентифікатор Char. Змінні та константи символьного типу можуть набувати значень з безлічі символів коду ASCII. Var simvol, bukva, z: char; Оголошення символьних змінних
  32. 32. Строковому типу відповідає стандартний ідентифікатор String. Var S: String; (Рядок від 0 до 255 символів) S2: String; (Стоку з 5-ти символів)
  33. 33. Рядок символів являє собою послідовність символів набору символів коду ASCII, укладену в одиночні лапки. Рядки у мові ПАСКАЛЬ – це послідовність символів, записана між апострофами. Якщо в рядку як змістовний символ необхідно вжити сам апостроф, слід записати два апострофи. Приклади рядків: "РЯДОК" "STRING" "АД""ЮТАНТ"
  34. Символьний тип, а також цілі та булевські типи відносять до так званих порядкових типів.  Багато допустимих значень будь-якого порядкового типу є впорядкованою послідовністю, кожен елемент якої має свій порядковий номер (починаючи з 0).
  35. 35. Функція Ord повертає порядковий номер цього значення описі типу. Ord(2)=2, Ord('0')=48 Writeln(ord('e')); Writeln(ord('9'));
  36. 36. Таблиця кодування ASCII ASCII (American Standard Code for Information Interchange; вимовляється «аскі») -комп'ютерне кодування для представлення латинського алфавіту, арабських цифр, деяких знаків пунктуації та символів, що управляють. Її запровадив американський інститут стандартизації ANSI.

Cлайд 1

МОВА ПРОГРАМУВАННЯ ПАСКАЛЬ Богданов Володимир Безкоштовні презентації http://prezentacija.biz/

Cлайд 3

Мова Паскаль була створена Ніклаусом Віртом у 1968-1969 роках після його участі у роботі комітету розробки стандарту мови Алгол-68. Мова названа на честь французького математика, фізика, літератора та філософа Блеза Паскаля, який створив першу у світі механічну машину, що складає два числа. Перша публікація Вірта про мову датована 1970 роком, представляючи мову, автор вказував як мету її створення - побудова невеликої та ефективної мови, що сприяє гарному стилю програмування, що використовує структурне програмування та структуровані дані. Наступна робота Вірта була спрямована на створення на основі Паскаля мови системного програмування, зі збереженням можливості вести на його основі систематичний, цілісний курс навчання професійного програмування. Результат цієї роботи – мова Модула-2.

Cлайд 4

UCSD Pascal Основна стаття: UCSD Pascal У 1978 році в Каліфорнійському університеті в Сан-Дієго була розроблена система UCSD p-System, що включала порт компілятора Вірта з мови Паскаль в переносний p-код, редактор вихідних кодів, файлову систему та інше, а також реалізувала значне число розширень мови Паскаль, такі як модулі, рядки символів змінної довжини, директиви трансляції, обробка помилок виводу-введення, звернення до файлів за іменами та інше. Згодом основні реалізації мови Паскаль ґрунтувалися на цьому діалекті.

Cлайд 5

Object Pascal] Основна стаття: Object Pascal В 1986 фірма Apple розробила об'єктне розширення мови Паскаль, отримавши в результаті Object Pascal. Він був розроблений групою Ларрі Теслер, який консультувався з Ніклаусом Віртом.

Cлайд 6

У 1983 році з'явилася перша версія інтегрованого середовища розробки Turbo Pascal фірми Borland, що базувалася на однойменній реалізації Паскаля. В 1989 об'єктне розширення мови було додано в Turbo Pascal версії 5.5. Остання версія (7.0) була перейменована на Borland Pascal. Об'єктні засоби були запозичені з Object Pascal від Apple, мовні різницю між об'єктним Turbo Pascal 5.5 і Object Pascal від Apple вкрай незначні. Майже в той же час, що і Borland, Microsoft випустив свою версію об'єктно-орієнтованої мови Паскаль.і] Ця версія Паскаля не набула широкого поширення. Подальший розвиток реалізації Паскаля від Borland породив варіант Object Pascal від Borland, згодом, у ході розвитку середовища програмування Delphi, який отримав однойменну назву.

Cлайд 7

Важливим кроком у розвитку мови є поява вільних реалізацій мови Паскаль l і GNU Pascl, які не тільки увібрали в себе риси безлічі інших діалектів мови, але й забезпечили надзвичайно широку переносимість написаних на ній програм (наприклад, GNU Pascal підтримує більше 20 різних платформ, під більш ніж 10 різними операційними системами Free Pascal забезпечує спеціальні режими сумісності з різними поширеними діалектами мови, такими як Turbo Pascal (повна сумісність), Delphi та іншими). Починаючи з Delphi 2003, створено реалізацію мови для платформи Net, хоча розробники продовжують використовувати Delphi більш ранніх версій. Про комерційні розробки на Free Pascal, GNU Pascal і TMT Pascal на даний момент відомо мало. Крім того, в Південному федеральному університеті розроблено PascalABC.NET - мову програмування Паскаль, що включає більшість можливостей мови Delphi, а також ряд власних розширень. Він заснований на платформі Microsoft.NT і містить практично всі сучасні мовні засоби: класи, перевантаження операцій, інтерфейси, обробку винятків, узагальнені класи та підпрограми, складання сміття, лямбда-вираження.

Cлайд 8

Особливостями мови є сувора типізація та наявність засобів структурного (процедурного) програмування. Паскаль був однією з перших таких мов. На думку Вірта, мова повинна сприяти дисциплінованому програмуванню, тому, поряд із суворою типізацією, у Паскалі зведено до мінімуму можливі синтаксичні неоднозначності, а сам синтаксис автор намагався зробити інтуїтивно зрозумілою навіть за першого знайомства з мовою.

Cлайд 9

Тим не менш, спочатку мова мала ряд обмежень: неможливість передачі функцій масивів змінної довжини, відсутність нормальних засобів роботи з динамічною пам'яттю, обмежена бібліотека введення-виводу, відсутність засобів для підключення функцій написаних іншими мовами, відсутність засобів роздільної компіляції тощо. розбір недоліків мови Паскаль того часу був виконаний Брайаном Керніганом у статті «Чому Паскаль не є моєю улюбленою мовою програмування» (ця стаття вийшла на початку 1980-х, коли вже існувала мова Модула-2, нащадок Паскаля, позбавлений більшості його вад, а також розвиненіші діалекти Паскаля). Деякі недоліки Паскаля були виправлені в ISO-стандарті 1982 року, зокрема, в мові з'явилися відкриті масиви, що дали змогу використовувати ті самі процедури для обробки одновимірних масивів різних розмірів.

Cлайд 10

Однак багато недоліків мови не виявляються або навіть стають перевагами під час навчання програмування. Крім того, в порівнянні з основною мовою програмування в академічному середовищі 1970-х (яким був Фортран, який мав набагато суттєвіші недоліки), Паскаль був значним кроком вперед. До 1980-х років Паскаль став основою для численних навчальних програм, в окремих випадках на його основі були створені спеціалізовані навчальні мови програмування, так, на початку 1980-х років у СРСР для навчання школярів основ інформатики та обчислювальної техніки Андрій Єршов розробив алголо-паскалеподібний "навчальна алгоритмічна мова".

Cлайд 11

Найбільш відомою реалізацією Паскаля, що забезпечила широке поширення та розвиток мови, є Turbo Pascal фірми Borland, що виросла потім в об'єктний Паскаль для DOS (починаючи з версії 5.5) і Windows і далі Delphi, в якій були впроваджені значні розширення мови. Діалекти Паскаля, що застосовуються в Turbo Pascal для DOS і Delphi для Windows, стали популярними через відсутність інших успішних комерційних реалізацій.

Cлайд 12

Після початку використання Паскаля в 1970 році і появи реалізацій, що розходяться не тільки в додатках, а й у синтаксисі, було порушено питання стандартизації мови. Стандарт мови був розроблений Ніклаусом Віртом у 1974 році спільно з Кетлін Йенсен (Kathleen Jensen). Надалі були прийняті міжнародний стандарт від ISO та американський від ANSI. На даний момент, виділяють три принципово різних стандарти: Unextended Pascal (вихідний), Extended Pascal (розширений), Object-Oriented Extensions to Pascal (об'єктно-орієнтоване розширення Паскаля).

Cлайд 13

Cлайд 14

Синтаксис і мовні конструкції Паскаль, в його первісному вигляді, є чисто процедурною мовою і включає безліч алголоподібних структур і конструкцій з зарезервованими словами на кшталт if, then, else, while, for, і т. д. Тим не менш, Паскаль також містить велику кількість можливостей для структурування інформації та абстракцій, які відсутні в первісному Алголі-60, такі як визначення типів, записи, покажчики, перерахунки та безлічі. Ці конструкції були частково успадковані або інспіровані від мов Сімула-67, Алгол-64, створеного Ніклаусом Віртом AlgolW (англ.) рос. та запропоновані Хоаром. У сучасних діалектах (Free Pascal) доступні такі операції, як навантаження операторів та функцій.

Cлайд 15

program p; begin end. Програма не виконує жодних дій та містить порожній блок операторів. Приклад програми, що виводить рядок Hello, world!

Cлайд 16

begin writeln("Hello, World!"); (Оператор виведення рядка) end.

Cлайд 17

Cлайд 18

Cлайд 19

Cлайд 20

У Pascal над цілими типами (byte, shortint, word, integer, longint та його діапазони) допустимі побітові операції. Логічні операції над бітами: Над бітами двох цілих операнда можна виконувати раніше розглянуті логічні операції: not, and, or, xor. Відмінність між побітовими та логічними операціями полягає в тому, що побітові (порозрядні) операції виконуються над окремими бітами операндів, а не над їх значенням у десятковому (зазвичай) поданні. Виділяється поняття порядкових типів даних (ordinal), до них відносяться цілі типи (знакові та беззнакові), логічний (boolean), символьний (char), типи, що перерахуються, і типи-діапазони. Порядкові типи задаються цілим числом (кодом), яке можна отримати за допомогою функції ord. Усі операції, що виконуються над порядковими типами, виконуються зі своїми кодами.

Cлайд 21

Cлайд 22

Для порядкових типів визначено операції inc, dec, succ, pred, ord, операції порівняння (=>

Cлайд 23

Cлайд 24

Cлайд 25

У Паскалі Єнсен та Вірта рядки представлялися як упаковані масиви символів; отже вони мали фіксовану довжину і зазвичай доповнювалися до цієї довжини пробілами. У сучасному Паскалі для роботи з рядками використовується вбудований тип string, що підтримує операції конкатенації (+) та порівняння (> =

Cлайд 26

Тип string [n] або просто string у діалектах мови 1970-1990-х років визначався у вигляді масиву символів array of char (n за замовчуванням приймало значення 80 у UCSD Pascal і 255 у Turbo/Borland Pascal), код нульового символу при такому поданні служить завдання довжини рядка, відповідно рядок міг мати максимальний розмір 255 символів. За замовчуванням у Delphi і FreePascal як String використовується тип AnsiString, пам'ять під який виділяється та звільняється компілятором динамічно, а максимальний розмір рядка у поточних реалізаціях становить 2 гігабайти. Крім того, в Delphi і Free Pascal як string може використовуватися тип WideString, де застосовується 16-бітове уявлення символів у кодуванні UCS-2, при цьому засоби перетворення з однобайтових рядків у багатобайтові і назад у стандартній бібліотеці мови відсутні.

Cлайд 27

Нові типи можна визначити з існуючих: type ( секція оголошення типів ) x = Integer; y = x;

Cлайд 28

Понад те, з примітивних типів може бути сконструйовані складові: type ( секція оголошення типів ) a = Array of Integer; ( Визначення масиву ) b = record ( Визначення запису ) x: Integer; y: Char; end; c = File of a; (Визначення файлу)

Cлайд 29

Файлові типи в Паскалі поділяються на типові, текстові та файли без типів. Як показано у наведеному прикладі, типізовані файли в Паскалі - це послідовності однотипних елементів. Для кожного файлу існує змінна вказівник на буфер, яка позначається f^. Процедури get (для читання) та put (для запису) переміщують покажчик до наступного елемента. Читання реалізовано так, що read (f, x) являє собою те саме, що і get (f); x:=f^. Відповідно, запис реалізована так, що write(f, x) являє собою те саме, що і f ^ := x; put(f). Текстові файли text визначені як розширення типу file of char і крім стандартних операцій над типізованими файлами (читання, запис символу), дозволяють здійснювати символьне введення-виведення у файл всіх типів даних аналогічно консольному введення-виводу.

Cлайд 30

Файли без типів оголошуються як змінні типу файлу. З ними можна проводити операції побайтового нетипізованого вводу-виводу по кілька блоків байт зазначеної довжини через буфер, для цього служать спеціальні процедури blockread і blockwrite (розширення UCSD).

Cлайд 31

Cлайд 32

Cлайд 33

Cлайд 34

Cлайд 35

Покажчики Паскаль підтримує використання покажчиків (типізовані ^тип та нетипізовані pointer): type a = ^b; b = record x: Integer; y: Char; z: a; end; var pointer_to_b:a;

Cлайд 36

Тут змінна pointer_to_b - покажчик тип даних b, що є записом. Тип типізованого покажчика може бути заданий перед оголошенням типу, який він посилається. Це виняток до правила, яке свідчить, що будь-яка річ має бути оголошена перед тим, як використовується. Введення цього виключення дозволило організовувати рекурентні визначення структур даних, у тому числі такі, як лінійні списки, стеки та черги, включаючи покажчик на запис в описі цього запису (див. також: нульовий покажчик - nil). Для типізованого покажчика визначено операцію розіменування (її синтаксис: покажчик^). Щоб створити новий запис та присвоїти значення 10 та символ A полям x та y у ньому, необхідні наступні оператори:

Cлайд 37

new(pointer_to_b); (Виділення пам'яті покажчику) pointer_to_b^.x:= 10; (розіменування покажчика та звернення до поля запису) pointer_to_b^.y:= "A"; pointer_to_b^.z:= nil; ... dispose(pointer_to_b); (звільнення пам'яті з-під покажчика)

Cлайд 38

Для цілей звернення до полів записів та об'єктів можна використовувати оператор with, як показано у прикладі: new(pointer_to_b); with pointer_to_b^ do begin x:=10; y:= "A"; z:= nil end; ... dispose(pointer_to_b);

Cлайд 39

Процедурний тип В оригінальній мові Паскаль Йенсен та Вірта процедурний тип використовувався лише при описі формального параметра. Вже TP існував повноправний процедурний тип. У оголошенні типу ставиться заголовок процедури чи функції (без імені), узагальнено описує інтерфейс підпрограми. Значення цього типу містить покажчик на підпрограму із заголовком, що відповідає описаному в оголошенні типу. За допомогою ідентифікатора змінної може бути виклик відповідної процедури або функції.

Cлайд 40

Паскаль - мова структурного програмування, що означає, що програма складається з окремих стандартних операторів, що виконуються послідовно, в ідеалі - без використання команди GOTO.

Cлайд 41

У операторах while, for, if, case як виконуваний оператор може використовуватися блок. Така конструкція, що є звичайним оператором або блоком, називається складним оператором. У Turbo Pascal для управління процесом компіляції існують директиви, які містяться в коментарі і дозволяють перемикати режими роботи компілятора - наприклад, включати та відключати перевірку операцій введення-виводу, переповнення:

Cлайд 42

У Паскалі підпрограми поділяються на процедури і функції: Синтаксично процедури і функції складаються з заголовка (що містить ключове слово procedure або function, імені, за яким може слідувати опис параметрів, що передаються в дужках, тип значення, що повертається через символ двокрапки для функцій і точки з комою для процедур ), після заголовка слідує тіло, після якого ставиться символ;.

Cлайд 43

Тіло процедури, як і програми, своєю чергою може містити опис процедур і функцій. Таким чином, процедури та функції можуть бути вкладені один в одного як завгодно глибоко, при цьому тіло програми – найвище у ланцюжку. Причому вміст секцій опису змінних, типів, констант, зовнішнього тіла (процедури, функції, програми), які розташовані перед описом процедури/функції, доступні всередині неї. Також у більшості діалектів з процедури можна звертатися до параметрів зовнішньої процедури. Після заголовком процедур/функцій замість тіла може поміщатися ключове слово forward, це у разі, якщо опис процедури/функції розташовується у програмі після її виклику, і пов'язані з підтримуваної в Паскалі можливістю компіляції програми за один прохід. Процедури відрізняються від функцій тим, що функції повертають будь-яке значення, а процедури – ні.

Cлайд 44

До появи зв'язкових модулів у тому сучасному вигляді деякі реалізації Паскаля підтримували модульність рахунок механізму включення заголовних файлів, схожого механізм #include у мові Си: з допомогою спеціальної директиви, оформлюваної як псевдокоментарі, наприклад, ($INCLUDE "файл"), вміст зазначеного файла прямо включалося до тексту програми у вихідному, текстовому вигляді. Таким чином можна було розділити програмний код на безліч фрагментів для зручності редагування, але перед компіляцією вони автоматично об'єднувалися в один файл програми, який в результаті і оброблявся компілятором. Така реалізація модульності є примітивною і має безліч очевидних недоліків, тому вона була швидко замінена. Сучасні реалізації мови Паскаль (починаючи з UCSD Pascal) підтримують модулі. Програмні модулі можуть бути двох видів: модуль головної програми, який, як звичайно, починається з ключового слова program і тіло якого містить код, що запускається після завантаження програми в пам'ять, і допоміжних модулів, що містять типи, константи, змінні, процедури та функції, призначені для використання в інших модулях, у тому числі головному модулі.

Cлайд 45

Загальна структура модуля, що підключається на Паскалі виглядає наступним чином: unit UnitName1; interface ... implementation ... begin (може бути відсутнім - використовується, якщо необхідно помістити оператори ініціалізації) ... end.

Cлайд 46

Можливий ще один варіант: unit UnitName2; interface...implementation...initialization...finalization.... end.

Cлайд 47

На відміну від головної програми, файл модуля починається з ключового слова UNIT, за яким слідує ім'я модуля та точка з комою. Сучасні реалізації, як правило, вимагають, щоб ім'я модуля збігалося з ім'ям вихідного коду коду, в якому цей модуль міститься. Модуль містить три секції: інтерфейсну секцію, секцію реалізації та тіло модуля.

Cлайд 48

Інтерфейсна секція йде першою, починається з ключового слова INTERFACE і закінчується там модуля, де починається секція реалізації або тіло. В інтерфейсній секції оголошуються ті об'єкти (типи, константи, змінні, процедури та функції - для них містяться заголовки), які мають бути доступні ззовні модуля. У цьому допускається часткове оголошення типів: вони можуть оголошуватися без зазначення структури, лише ім'ям. При використанні такого типу у зовнішній програмі допускається оголошення змінних та параметрів цього типу, привласнення значень, але неможливо отримати доступ до деталей його реалізації. Процедури та функції в інтерфейсній секції оголошуються у вигляді форвардів – заголовків з параметрами, але без тіла. Склад інтерфейсної секції модуля такий, що його достатньо для генерації коду, який використовує модуль. Змінні, оголошені в інтерфейсній секції, є глобальними, тобто існують у єдиному екземплярі та доступні у всіх частинах програми, які використовують цей модуль.

Cлайд 49

Секція реалізації слідує за інтерфейсною і починається з ключового слова IMPLEMENTATION. У ньому розміщуються описи процедур та функцій, оголошених в інтерфейсній секції, а також описи типів, констант, змінних, процедур та функцій, які необхідні для реалізації інтерфейсних процедур та функцій. Опис процедури або функції, оголошеної в інтерфейсній секції, повинен мати такий самий заголовок, як в оголошенні. У тілі можуть використовуватися інші процедури та функції даного модуля, оголошені як в інтерфейсній частині, так і у секції реалізації. Змінні, оголошені в секції реалізації, є, по суті, глобальними (тобто існує тільки один екземпляр кожної такої змінної на всю програму), але вони доступні тільки з процедур і функцій, описаних у секції реалізації даного модуля, а також з його тіла. Якщо в інтерфейсній секції є скорочені оголошення типів, ці типи повинні бути повністю описані в секції реалізації.

Cлайд 50

Тіло модуля починається ключовим словом BEGIN, що знаходиться на верхньому рівні вкладеності. Тіло містить програмний код, який виконується один раз під час завантаження модуля. Тіло може застосовуватися для ініціалізації, привласнення початкових значень змінним модулем, виділення ресурсів для його роботи і так далі. Тіло модуля може бути відсутнім. У ряді реалізацій Паскаля, наприклад, Delphi, замість тіла модуля можуть застосовуватися дві секції (також необов'язкові) - INITIALIZATION і FINALIZATION. Вони розташовуються в кінці модуля після відповідного ключового слова. Перша - секція ініціалізації, - містить код, який має бути виконаний під час завантаження модуля, друга - секція фіналізації, - код, який буде виконаний при розвантаженні модуля. Секція фіналізації може виконувати дії, зворотні ініціалізації – видаляти об'єкти з пам'яті, закривати файли, звільняти виділені ресурси. Модуль закінчується ключовим словом END із точкою.

Cлайд 51

Щоб використовувати модуль, головна програма або інший модуль повинні імпортувати модуль, тобто містити оголошення про його використання. Це оголошення робиться за допомогою інструкції підключення модулів, що є ключовим словом USES, за яким через кому слідують імена модулів, які потрібно підключити. Інструкція підключення повинна йти безпосередньо за заголовком програми, або після ключового слова INTERFACE, якщо підключення здійснюється в модулі.

Cлайд 52

Модулі, підключені до інтерфейсної секції, можна використовувати у всьому модулі - і секції реалізації, й у тілі. Але секція реалізації може мати власну інструкцію підключення (вона слідує за ключовим словом IMPLEMENTATION), що містить імена модулів, що підключаються, які відсутні в інтерфейсній секції, але потрібні для секції реалізації. Одним із приводів використання окремого списку підключення для розділу реалізації є ситуація, коли два або більше модулів використовують один одного. Щоб не виникали циклічні посилання в оголошеннях використання таких модулів, принаймні один із них повинен підключати інший до секцій реалізації.

Cлайд 53

Будь-які оголошені в інтерфейсних секціях модулів об'єкти можна використовувати у програмі там, де підключені ці модулі. Імена імпортованих з підключених модулів об'єктів залишаються тими самими, і їх можна використовувати безпосередньо. Якщо два або більше підключених модулів мають однакові об'єкти, і компілятор не може їх розрізнити, то при спробі використання такого об'єкта буде видана помилка компіляції - неоднозначне завдання імені. В цьому випадку програміст повинен застосовувати кваліфікацію імені – вказати ім'я у форматі «.».

Cлайд 54

Проблеми можуть виникнути, якщо виникає потреба у програмі двох різних однойменних модулів. Якщо модулі доступні лише у відкомпілюваному вигляді (тобто змінити їх імена неможливо), неможливим є їх одночасний імпорт. Стандартного вирішення такої колізії на рівні мови не існує, але конкретні компілятори можуть пропонувати ті чи інші способи її обходу, зокрема засоби призначення псевдонімів імпортованим модулям і прямої вказівки, який модуль з якого файлу брати.

Cлайд 55

Модулі спроектовані у розрахунку забезпечення роздільної компіляції - компілятор нічого не винні компілювати імпортовані модулі у тому, щоб відкомпілювати модуль, який їх використовує. Однак, щоб правильно компілювати модуль, компілятор повинен мати доступ до секції інтерфейсу всіх модулів, що використовуються. Існує два різні, іноді сумісні підходи до організації такого доступу. Модулі компілюються в бінарні файли спеціального формату (у кожного компілятора свого), в яких збережена докладна інформація про об'єкти, оголошені в інтерфейсній секції, також може утримуватися створений при компіляції модуля об'єктом мовою, але використовує при цьому лише інтерфейсну секцію модуля. Якщо бібліотечний модуль поставляється у відкомпілюваному вигляді (без повних вихідних текстів), то разом із бінарним файлом йде урізаний файл вихідного коду модуля, що містить лише інтерфейсну секцію. Компілятору цього достатньо, щоб правильно обробляти звернення з модулів, а на етапі складання програми компонувальник просто включає в програму бінарний файл.

Cлайд 56

Завантаження та вивантаження модулів Для нормальної роботи модуля може знадобитися виконати деякі дії до початку використання: ініціалізувати змінні, відкрити потрібні файли, виділити пам'ять або інші ресурси. Все це може бути зроблено в тілі модуля або в секції ініціалізації. Події, обернені ініціалізації, робляться у секції фіналізації.

Cлайд 57

Порядок ініціалізації та фіналізації модулів побічно визначається порядком оголошення в секції uses, але для статично відкомпільованих програм (де модуль або компілюється в один файл з головною програмою, або знаходиться в окремій динамічній бібліотеці, але завантажується на етапі початкового завантаження), компілятор завжди гарантує, що ініціалізація буде виконана до першого використання модуля. Фіналізація виконується при завершенні роботи програми, після завершення головного модуля, так що використовувані модулі фіналізуються пізніше, ніж їх.

Cлайд 58

У разі динамічного завантаження модулів, що управляється самим програмістом, ініціалізатори виконуються при завантаженні, тобто в момент, коли команда завантаження модуля повернула управління, ініціалізатор його вже виконано. Фіналізатор виконується після розвантаження, зазвичай - при виконанні команди розвантаження модуля. Якщо ця команда не викликається, динамічно завантажені модулі фіналізуються так само, як решта - при завершенні програми.

Cлайд 59

Об'єктно-орієнтоване програмування (ООП) - це технологія створення складного програмного забезпечення, засноване на представленні програми у вигляді сукупності об'єктів, кожен із яких є екземпляром певного класу, а класи утворюють ієрархію з успадкуванням властивостей.

Cлайд 60

Основна перевага ООП - це скорочення кількості міжмодульних викликів і зменшення обсягів інформації, що передається між модулями. Це досягається за рахунок повнішої локалізації даних та інтегрування їх з підпрограмами обробки.

Cлайд 61

Основні недоліки в ООП - це деяке зниження швидкодії через складнішу організацію програмної системи, а також, як правило, помітне збільшення обсягу бінарного коду (особливо при використанні стандартних бібліотек класів у невеликих програмах) через те, що більшість сучасних компіляторів і компонувальників не здатні виявити і видалити весь код, що припадає на класи, що не використовуються, віртуальні методи та інші елементи ООП.

Cлайд 62

У Object Pascal класи задаються за допомогою типу object, аналогічного record, який крім полів даних може містити заголовки процедур та функцій (вони називаються методами). Імена описуваних методів слідують за ім'ям класу через точку.

Cлайд 63

Конструктор і деструктор задаються як звичайні процедури, але замість ідентифікатора procedure задаються ключові слова constructor і destructor. Відповідно, на відміну від С++-подібних мов вони мають ім'я, відмінне від імені класу, деструкторів може бути кілька і вони можуть мати параметри (на практиці ця можливість використовується рідко, зазвичай клас має єдиний деструктор Destroy, що перевизначає віртуальний деструктор класу-батька ).

Cлайд 64

Підтримуються одиничне наслідування, поліморфізм класів, механізм віртуальних методів (слово virtual після заголовка методу класу). Існують і динамічні методи (в TP описуються шляхом додавання цілого числа після слова virtual і використовуються переважно для обробки повідомлень; у Delphi та FreePascal для цих цілей використовується слово message, а для створення звичайних динамічних методів - слово dynamic), що відрізняються меншим використанням пам'яті та меншою швидкістю виклику рахунок відсутності дублювання динамічних методів предків у VMT нащадка (проте FreePascal робить різниці між віртуальними і динамічними методами). У Delphi, FPC реалізовано навантаження операцій, абстрактні методи, директиви private, protected, public, published (за замовчуванням члени класу є public):

Cлайд 65

У діалекті Delphi класи можуть також конструюватися за допомогою слова class (причому взаємне успадкування з object-класами не допускається) і введені інтерфейси (interface) - всі абстрактні методи і не можуть містити полів даних. Всі класи (створені за допомогою class) є спадкоємцями TObject, всі інтерфейси походять від IUnknown. Класи, створені за допомогою class, можуть продавати кілька інтерфейсів.

Cлайд 66

У Delphi інтерфейси було введено підтримки технології COM фірми Microsoft. Класи (Class) на відміну від звичайних класів (Object) не потребують явного виділення/звільнення пам'яті, пам'ять під них динамічно виділяється конструктором з ім'ям Create, що викликається з ім'ям класу, і звільняється при виклику деструктора з ім'ям Destroy (можуть мати інші імена) . Змінна такого класу на відміну від класу object зберігає адресу екземпляра класу в пам'яті, значення nil використовується для вказівки порожнього посилання, тому для звільнення об'єкта в TObject визначено спеціальний метод free, що перевіряє посилання на nil та викликає віртуальний деструктор Destroy. Код із використанням таких класів буде виглядати так:

Cлайд 67



Сподобалась стаття? Поділіться їй