Тема: початки мови програмування Pascal.
Мета:
розуміє як використовувати різні типи даних.
Обладнання: комп’ютери зі встановленими ОС та середовищем програмування Free Pascal, (дана) інструкція.
Структура уроку
Хід уроку
1. Організаційний момент
Привітання з учнями. Перевірка присутності і готовності учнів до уроку. Перевірка виконання домашнього завдання. Оголошення теми й мети уроку.
2. Актуалізація опорних знань
Дати означення понять, виділені жирним шрифтом.
Алгоритм — це запис скінченої послідовності вказівок, виконання яких призводить до розв'язання певної задачі.
Вказівка (алгоритму) — це спонукальне речення, що вказує, яку дію має виконати виконавець алгоритму.
Виконавець (алгоритму) — це жива істота (людина або тварина) або автоматичний пристрій (робот, електронна обчислювальна машина тощо), спроможна діяти відповідно з алгоритмом.
Система вказівок виконавця — це множина (сукупність) всіх вказівок, які може виконувати даний виконавець.
Середовище виконання алгоритму — об'єкти, з якими працює виконавець у процесі виконання алгоритму.
Властивості алгоритму: дискретність, визначеність, виконуваність, скінченність, результативність, масовість, ефективність.
Дискретність (латинською discretus — розділений, розривний) алгоритму означає, що виконання алгоритму зводиться до виконання окремих дій (кроків) у певній послідовності. Причому, кожну вказівку алгоритму виконують за скінченний проміжок часу.
Визначеність (однозначність) означає, що алгоритм однозначно визначає порядок дій виконавця, результат цих дій і не потребує додаткового тлумачення..
Виконуваність означає, що алгоритм, призначений для певного виконавця, може містити лише вказівки, які входять до системи вказівок цього виконавця.
Скінченність означає, що виконання алгоритму закінчиться після скінченної (можливо, досить великої) кількості кроків і за скінченний час для довільних вхідних даних.
Результативність алгоритму означає, що після закінчення виконання алгоритму обов’язково:
Масовість алгоритму означає, що алгоритм можна застосувати до цілого класу однотипних задач, для яких спільними є умова та хід розв’язування та які відрізняються лише початковими (вхідними) даними. Наприклад, алгоритмом дій, складеним для одного касира, можуть успішно скористатися всі касири супермаркету. А програмою пошуку коду і підрахунку суми вартостей товарів, придбаних покупцем, — усі комп'ютери супермаркету
Ефективність алгоритму описує час виконання і об'єм ресурсів, необхідних для виконання алгоритму: чим менше часу (часова ефективність) і ресурсів (просторова ефективність), тим ефективність вища.
3. Вивчення нового матеріалу
У театрі хід подій на сцені попередньо визначено у найдрібніших деталях:
Відхід від цього у театрі — імпровізація акторів — інколи сприяє успіху вистави. Але імпровізації у технологічних процесах, до яких належить і обчислювальні, призводить до збоїв і аварій.
Робота комп'ютера полягає у виконанні програми — набору певних дій у певному порядку. Програма є алгоритмом дій комп’ютера, записаним зрозумілою для нього мовою.
Щоб задати комп'ютеру послідовність дій, потрібно задати послідовність двійкових кодів відповідних вказівок. Писати такі програми — дуже складна й марудна справа.
Простіше писати програму деякою мовою, наближеною до природної людської мови, а переклад у машинні коди доручити комп'ютеру. Так з'явилися мови, призначені спеціально для написання програм — мови програмування, що на відміну від розмовної мови не допускають двозначностей чи вільного тлумачення.
Мова програмування (англійською programming language) — це система позначень для опису алгоритмів та структур даних.
Будь-яка мова програмування має такі 3 основні складові: абетку, синтаксис (правила написання) і семантику (правила тлумачення й виконання).
Абетка мови Pascal (Паскаль):
Примітка. Компілятор Pascal не враховує регістр літер.
За допомогою цих символів записують таке.
Операції:
– — віднімання;
+ — додавання;
* — множення;
/ — ділення (з дійсним результатом).
Відношення:
< — менше;
> — більше;
<= — не більше;
>= — не менше;
= — дорівнює;
<> — не дорівнює.
Елементи синтаксису —
використання розділових знаків для відокремлення чи вказання:
; — вказівок;
, — елементів списків;
. — цілої частини числа від дробової;
.. — меж неперервного діапазону;
' ' — символів або рядків тексту;
( ) — виразів і списків;
[ ] — індексу чи діапазону індексів масиву;
(* *) або { } — коментарів;
: — міток;
$ — шістнадцяткового коду;
^ — символ керування.
Зарезервовані слова, зміст яких фіксовано мовою і які неможна використовувати як назви сталих, змінних, процедур, функцій чи міток:
and, asm, array, begin, case, const, constructor, destructor, div, do, downto, else, end, exports, file, for, function, goto, if, implementation, in, inherited, inline, interface, label, library, mod, nil, not, object, of, or, packed, procedure, program, record, repeat, set, shl, shr, string, then, to, type, unit, until, uses, var, while, with, xor, absolute, assembler, export, external, far, forward, index, interrupt, near, private, public, resident, virtual.
Використання імен псевдомасивів Port, PortW, Mem, MemW, MemL не викликає помилки, але унеможливлює їх подальше застосування.
В описі мови традиційно використовують такі умовні позначення:
< > — обов'язковий параметр;
[ ] — не обов'язковий параметр.
Опишемо структуру програми мовою Pascal.
Програму зазвичай, але не обов'язково, починають заголовком такого вигляду:
program <назва програми>
Наявність чи відсутність заголовку ніяк не впливає компіляцію (перетворення на машинні коди) чи роботу програми.
Описова частина містить опис всього, що буде надалі використано у програмі:
uses <назва1>,<назва2> ...; — приєднання бібліотек та модулів;
label <назва1>,<назва2> ...;— оголошення (перелік) міток;
type
<назва1>=<опис1 через наявні типи>;
<назва2>=<опис2 через наявні типи>...; — опис типів даних;
const
<назва1>[:тип]=<значення1>;
<назва2>[:тип]=<значення2> ...; — оголошення сталих (величин), значення яких не буде змінено протягом виконання програми. При спробі змінити сталу буде вказано на помилку на етапі компіляції;
var <назва1>, <назва2>... :<тип> — оголошення змінних;
procedure <назва>
[параметри];
[опис локальних змінних]
[вказівки] — оголошення процедури;
function <назва>
[параметри] : <тип>
[опис локальних змінних]
[вказівки] — оголошення функцій користувача;
Виконувана частина розпочинається службовим словом begin, а завершується словом end з крапкою. Між цими службовими словами записують вказівки щодо дій з об`єктами програми, оголошеними в розділі описів. Вказівки відокремлюють одну від одної крапкою з комою.
begin <вказівка1>; <вказівка2>... end.
Подамо приклад програми, яка виводить на стандартний пристрій виведення (усталено — на екран) запрошення ввести 2 цілих, зчитує два числа зі стандартного пристрою введення (усталено — з клавіатури) і виводить їхній добуток на стандартний пристрій виведення (екран).
program example1;
var a, b: integer;
begin
write('Введіть два числа через пропуск ');
readln(a,b);
writeln('Добуток дорівнює ',a*b);
end.
У цьому прикладі, як і в деяких наступних, використано позначення для дій, які буде означено пізніше. Початкові знання з англійської мови дозволяють розібратися у тексті програми без сторонньої допомоги.
Cлушне запитання: «Як виконати написану програму?» Бо текст програми, написаний на аркуші паперу, не буде виконано.
Для зручності роботи користувача з створено інтерактивне інтегроване середовище програмування, у якому об'єднано можливості:
текстового редактора — для набирання текстів програм;
компілятора — для виявлення помилок у програмі та створення машинного коду;
налагоджувача — для покровного виконання програм і виявлення алгоритмічних помилок
і в якому передбачено можливість запуску програми на виконання в разі успішної компіляції. Інтерактивним середовище називають тому, що воно працює в режимі постійного спілкування з користувачем, а інтегрованим тому, що об'єднує в собі одночасно всі згадані вище можливості.
Free Pascal — вільно поширюване середовище програмування, яке використовують при проведенні Міжнародної та Всеукраїнської учнівських олімпіад з інформатики. Інтерфейс і можливості цього середовища розглянемо на наступних уроках. Ядром середовища є мова Pascal. Перший компілятор цієї мови створено Ніклаусом Віртом у 1970-му у Федеральній вищій технічній школі Цюріха (німецькою Eidgenössische Technische Hochschule Zürich).
Для виконання вимог навчальної програми можна також скористатися середовищем Pascal ABC чи Turbo Pascal.
Зазвичай вважають, що програмувати складно і не кожен може бути програмістом. Насправді, маючи інтегроване середовище програмування, програмувати легко і просто, порівняно зі складанням алгоритмів. І навчитися цьому нескладно, якщо починати з редагування наявних програм.
Завдання 1. Змінити подану вище програму таким чином, щоб обчислювати:
Поняття величини є одним з найважливіших понять математики та фізики. Більшість з них є числовими. У програмуванні користуються таким визначенням.
Величина — одиниця даних, якими оперує програма. Вона має такі властивості:
назва (ідентифікатор) — послідовність літер латиниці, цифр і нижнього підкреслювання «_», на початку — обов'язково літера;
тип — визначає обсяг відведеної пам'яті, можливі дії, правила тлумачення бітів пам'яті та множину допустимих значень. Мова Pascal не предбачає зміни типу змінної протягом виконання програми. На відміну, наприклад, від мов Javasript чи Reduce.;
розмірність — проста або складена (структурована);
значення — елемент множини допустимих значень величини. Це єдина властивість змінної, яку можливо змінити протягом виконання програми, написаною мовою Pascal.
З кожною величиною (або її складовою для структурованої величини) пов'язана ділянка оперативної пам’яті, куди її під час роботи програми заносять та у якій зберегають. Цю ділянку визначено її адресою. Тут під адресою розуміють адресу першого байту з послідовновних щодо адресації байтів, відведених для збереження величини. Назва змінної слугує назвою цієї послідовності байтів під час виконання програми.
Оператор надання значення має такий вигляд:
<назва змінної>:=<вираз>
Тут типи змінної та виразу мають збігатися або хоча б належати до однієї категорії. Цілі, дійсні, булеві, рядкові (означення див. далі) — це різні категорії типів.
У мові Pascal передбачено використання таких простих типів змінних.
Цілі числові типи
Назва типу | Діапазон зміни | Кількість відведених байтів |
---|---|---|
byte | 0..255 | 1 |
word | 0..65535 | 2 |
shortint | – 128..127 | 1 |
integer | – 32768..32767 | 2 |
longint | – 2147483648..2147483647 | 4 |
int64 | – 9 223 372 036 854 775 808 ..9 223 372 036 854 775 807 | 8 |
Примітка. При опрацюванні даних опрацьовують кожен біт. Тому використання того типу даних, на який відведено менший об'єм пам'яті, призводить не лише до економії пам'яті, але й до економії часу роботи процесора. Але потрібно пильнувати, щоб результати всіх обчислень, у тому числі проміжних, лежали у діапазоні зміни обраного типу змінних.
Цілі типи є впорядкованими, тобто до них можна застосовувати операції порівняння. Вони є порядковими, тобто для них означені дії визначення попереднього чи наступного елемента. Крім операцій порівняння до цілих типів даних застосовують такі операції:
Примітка. Для від'ємних аргументів операції div, mod не завжди працюють у повній відповідності до означень чистої математики: можуть виникати від'мні лишки.
Подамо приклад програми знаходження кількості цифр введеного цілого числа.
program example2;
var n: int64; k: byte;
begin
writeln('Введіть ціле число');
readln(n);
k:=0;
while n>0 do Begin
inc(k);
n:=n div 10 End;
writeln('У введеному числі цифр ',k,'.' );
end.
Завдання 2. Змінити програму з метою знаходження цифр двійкового запису введеного числа, які можна вивести і у зворотньому порядку.
Дійсні числові типи
Назва типу | Діапазон зміни | Число значущих цифр | Кількість відведених байтів |
---|---|---|---|
Real | 2.9·10–39..1.7·1038 | 11–12 | 6 |
Single | 1.5·10–45..3.4·1038 | 7–8 | 4 |
Double | 5.0·10–324..1.7·10308 | 15–16 | 8 |
Extended | 3.4·10–4932..1.1·104932 | 19–20 | 10 |
Comp | – 9 223 372 036 854 775 808 ..9 223 372 036 854 775 807 | 19 | 8 |
Дійсні типи є впорядкованими, але не є порядковими. До дійсних типів даних застосовують операції порівняння, додавання, віднімання, множення, ділення (/). На них означені такі фінкції (перелік далеко неповний):
Тут синім кольором подано назви математичних функцій, які вивчають на уроках математики у старших класах і тут подано лише для відносної повноти опису. Зауважимо лише, що ab обчислюють так: exp(b*ln(a)).
Символьний тип char передбачає використання символів всієї кодової таблиці комп'ютера ASCII (літер, цифр, спеціальних символів). Цей тип є впорядкованим і порядковим (порівнюють коди символів). Символьну сталу записують як символ, взятий в апострофи. Наприклад, '$'.
Логічний тип boolean описує величину, що може бути лише хибною (false) або істиною (true), але на збереження якого відводять 1 байт.
Такі величини отримують, наприклад, у результаті обчислення логічних виразів з операціями порівняння (відношення). Для даних логічного типу визначено такі операції:
Значення операндів (аргументів) | Результат операції | |||||
---|---|---|---|---|---|---|
X | Y | not X | X and Y | X or Y | X xor X | |
false | false | true | false | false | false | |
false | true | true | false | true | true | |
true | false | false | false | true | true | |
true | true | false | true | true | false |
Подамо приклад програми порівняння одного з трьох введених цілих чисел з сумою решти
program example3; var a, b, c: integer; la,lb,lc: boolean; begin write('Введіть 3 цілих числа через пропуск '); readln(a,b,c); la:=a>b+c; lb:=b>c+a; lc:=c>a+b; writeln('a>b+c b>c+a c>a+b'); writeln(la:5,lb:6,lc:6); end.
В останній вказівці після двокрапки вказано кількість позицій (символів) для виведення (останню заповнено). Результат роботи при введенні 3 4 5 буде таким.
Введіть 3 цілих числа через пропуск 3 4 5
a>b+c b>c+a c>a+b
False False False
4. Закріплення вивченного матеріалу
5. Підбиття підсумків уроку
Виставлення оцінок.
6. Домашнє завдання
Вивчити навчальний матеріал уроку. Ознайомитися з наступними структурами мови Pascal, щоб виробити уявлення про можливості мови програмування. У разі потреби використати довідникову літературу або ресурси Інтернету.
Тип лінійного (одновимірного) масиву, що відповідає послідовності елементів:
array[<найменше значення індексу>..<найбільше значення індексу>] of <тип>;
Тип двовимірного масиву, що відповідає прямокутній таблиці елементів:
array[<найменше значення індексу1>..<найбільше значення індексу1>; <найменше значення індексу2>..<найбільше значення індексу2>] of <тип>;
Тип множина
set of <тип>
Тут <тип> передбачає наявність лише 256 різних значень. Наприклад, char, byte чи shortint.
Дії з множинами
record <назва поля1>: <тип поля1>; <назва поля2>: <тип поля2>; … end;
Щоб отримати доступ до значення поля, потрібно у тексті програми вказати назву змінної-запису і через крапку вказати назву поля:
<назва змінної (сталої)>.<назва поля>
Тип масиву записів особливо зручний при роботі з послідовністю елементів, що мають кілька характеристик. Якщо використовувати n масивів для опису n характеристик, то при переставленні двох членів послідовності потрібно використовувати 3n вказівок надання значення. При використанні масиву записів для цього достатньо 3 дії. Очевидний виграш у довжині коду і ймовірності припуститися помилки при наборі.
Типи файлів
Надалі ми обмежимося роботою з лише з текстовими файлами.
Робота з файлами
eoln(f) — булева функція — результат справдження висловлювання: «рядок файл f закінчився»;
eof(f) — булева функція — результат справдження висловлювання: «файл f закінчився»;
seekeoln(f) — булева функція — результат справдження висловлювання: «до кінця рядка файлу f залишилися лише пропуски»;
seekeof(f) — булева функція — результат справдження висловлювання: «до кінця файлу f залишилися лише пропуски й ознаки кінця рядка».
Тут і в наступних описах замість f можна записати будь-яку іншу назву файлу.
Оператори введення-виведення
read(f,<перелік величин>) — зчитування з файлу f без переходу на наступний рядок;
readln(f,<перелік величин>) — зчитування з файлу f з переходом на наступний рядок;
write(f,<перелік величин>) — запис у файл f без ознаки кінця рядка;
writeln(f,<перелік величин>) — запис у файл f з ознакою кінця рядка.
У разі відсутності назви файлової змінної f (і коми) операцію введення / виведення буде здійснено зі стандартним пристроєм Input / Output. Як усталено — з клавіатурою / екраном.
Галуження
if <умова> then <вказівка> else <вказівка>
— повна форма умовного оператора.
if <умова> then <вказівка>
— неповна форма умовного оператора.
goto <мітка> — перехід до мітки.
case <вираз> of <значення1>: <дія1>; <значення2>: <дія2>; … else <дія> end
— виконання дії залежно від значення виразу. Замість значень можна записувати діапазон у такому вигляді:
<найменше значення>..<найбільше значення>.
begin [<вказівки>] end — об'єднання кількох вказівок в одну.
Цикли
for j:=1 to n do <вказівка> for j:=n downto 1 do <вказівка>
— цикли з відомим діапазоном зміни індекса. У першому випадку змінна цілого типу j буде зростати від 1 до n, у другому — спадати від n до 1. Замість меж зміни (1 й n) можна записати довільні вирази, що набувають цілих значень, замість j — довільну допустиму назву змінної цілого типу.
while <умова> do <вказівка>
— з попередньою перевіркою умови.
repeat <вказівки> until <умов>>
— до справдження умови.
break — вихід з циклу.
halt [код виходу] — припинення виконання програми.
Тип рядок (тексту)
string — тип рядка до 255 символів включно;
string[1..n] — тип рядка до n символів включно.
Функції рядків
^<тип> — тип вказівника на змінну певного типу;
<назва>^ — звертання у тексті програми для доступу до значення. Без дашка ^ сама лише назва даватиме адресу на першу комірку області пам'яті, відведеної для збереження змінної;
new(<назва>) — виділення області оперативної пам'яті для даних певного типу і запам'ятовування адреси першої комірки області у змінній з назвою-аргументом;
dispose(<назва>) — вивільнення оперативної пам'яті для даних певного типу, починаючи з комірки, адресу якої вказано як аргумент.
Текст упорядкувала Українець Поліна Володимирівна, учитель спеціалізованої школи № 173 Солом’янського району міста Києва, під час виконання випускної роботи на курсах підвищення кваліфікації з 28.10.2013 по 27.12.2013.