Паскаль Огляд основних понять

ПАСКАЛЬ

ОГЛЯД ОСНОВНИХ ПОНЯТЬ

Відшукай усьому початок, і ти багато чого зрозумієш.

Козьма Прутков

Спочатку спробуємо розібратися в основних поняттях програмування.

1.1. Процес, алгоритм, мова

"Подібної тарабарщини, – сказав Король, – я ніколи в житті не чув"

Л.Керрол

З проблемами, або задачами, нам доводиться мати справу кожен день. Для нас вони мають вигляд вимог, наприклад , "Дістати Луну з неба" чи "Розв'язати квадратне рівняння", або запитань – "Скільки в морі краплин води?" чи "Скільки буде 2 помножити на 2?". Для того, щоб задачу розв'язати, треба попрацювати, тобто виконати якісь відповідні дії. Причому ці дії виконуються в певній послідовності. Послідовність дій ми будемо називати процесом. Процес перерахування краплин почнеться поїздкою до моря, а розв'язування квадратного рівняння – з обчислення дискримінанта.

Розв'язувати квадратні рівняння ми навчилися за підручником з алгебри. У ньому написано, що саме і в якому порядку треба зробити, щоб розв'язати рівняння. Тобто в ньому є описання дій. І це описання дій, які треба виконати для розв'язання задачі, називається алгоритмом. Створення алгоритму і є програмуванням. Людина програмує, тобто записує алгоритм, як правило, для того, щоб не згадувати наступного разу, які саме дії треба зробити, або щоб ці дії виконував хось інший.

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

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

Отже, алгоритм є записом, створеним за правилами деякої мови, тобто є виразом у цій мові.

Ми будемо записувати алгоритми, призначені для виконання їх не людиною, а комп'ютером. Їх ми будемо називати програмами. Хоча і існують такі речі, як програми проведення великих свят, навчальні програми тощо.

Для запису програм ми будемо користуватися мовою, що називається Паскаль на честь великого французького натураліста й математика. Цю мову створив на початку 70-х років видатний швейцарський вчений і педагог Ніклаус Вірт спеціально для навчання початкам програмування.

1.2. Комп'ютери та програми

Аналітична машина не претендує на винаходження чогось. Вона може робити все те, що ми зуміємо наказати їй.

Леді Лавлейс, 1844 г.

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

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

У процесора є своя власна пам'ять для збереження та обробки значень. Вона утворена спеціальними елементами, регістрами, і називається регістровою. Значення в регістрах обробляються набагато швидше, ніж в оперативній пам'яті, тому перед обробкою значення, як правило, читаються з пам'яті в регістри.

Дії, які може виконувати процесор, описуються вказівками типу: "прочитай число з такого-то місця пам'яті в такий-то регістр", "додай два числа з таких-то регістрів та запиши суму в такий-то регістр", "запиши число з такого-то регістра в таке-то місце пам'яті" або "виконай команду, записану в такому-то місці пам'яті". Ці вказівки називаються машинними командами.

Нехай, наприклад, Пам1, Пам2 і Пам3 позначають місця в пам'яті, де записано числа, а Рег1 і Рег2 – регістри. Для того, щоб додати два числа з Пам1 і Пам2 і записати результат у Пам3, процесор виконує дії, що позначаються у вигляді команд приблизно так:

прочитати з Пам1 у Рег1,

прочитати з Пам2 у Рег2,

додати числа з Рег1 і Рег2 і суму записати в Рег1,

записати з Рег1 у Пам3.

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

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

У пам'яті комп'ютера одночасно перебувають, як правило, декілька програм. Серед них є ціла система програм і даних під загальною назвою "операційна система" (рис.1.2). Саме за нею процесор визначає, команди якої з програм йому треба виконувати в той чи інший момент часу. Назви деяких із операційних систем усім добре відомі: DOS, WINDOWS-98, UNIX, OS/2 та інші.

1.3. Зовнішня пам'ять та файли

Крім оперативної пам'яті, у комп'ютері є зовнішня пам'ять – на зовнішніх носіях даних, наприклад, магнітних дисках. Носії розміщаються на спеціальних пристроях обміну даними з "зовнішнім світом", або пристроях уведення-виведення (ПУВ на рис.1.1). До ПУВ відносяться, наприклад, дисководи, екран, клавіатура, миша. Всі вони мають у своєму складі процесори, побудовані набагато простіше, ніж центральний процесор, і виконують зовсім інші команди. Процесори пристроїв обміну можуть переносити дані з зовнішніх носіїв в оперативну пам'ять, виконуючи читання з "зовнішнього світу" або навпаки, записувати дані з оперативної пам'яті в "зовнішній світ". Переміщення значень між процесором і УВВ відбуваються за допомогою спеціального пристрою – шини.

Кожному пристрою обміну виділено свою особливу ділянку оперативної пам'яті – порт. З нього пристрій переносить дані на зовнішній носій, записуючи їх, наприклад, на диск або екран комп'ютера. І саме в порт записуються дані від пристроїв обміну, наприклад, від клавіатури або дисковода. Комп'ютери, як правило, мають кілька дисководів для роботи з дисками різних типів, наприклад, жорсткими (hard, або Winchester disks), гнучкими (floppy disks), компактними (compact) та іншими.

Комп'ютер може мати й інші пристрої обміну даними, наприклад, сканери для читання візуальної інформації, плотери для створення зображень, модеми для підключення до телефонної мережі тощо.

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

Дані на зовнішніх носіях називаються файлами, наприклад, тексти або малюнки. Вони мають різноманітне походження та призначення, і записуються за різними правилами. Системи запису файлів називаються форматами.

Машинна програма теж є прикладом файла. Спочатку за допомогою спеціальних програм вона створюється й записується, як правило, на диск. Потім для виконання вона переписується звідти в оперативну пам'ять (ОП на рис.1.3). Цей запис програми в оперативну пам'ять називається завантаженням і виконується за спеціальною програмою – завантажником.

1.4. Мова Паскаль, трансляція та системи програмування

Система програмування робить комп'ютер зручним. Для цього вона пропонує мову й різні послуги, які фактично є програмами, що викликаються та керуються мовними засобами.

Ф.П.Брукс мол., 1975 р.

Кожний комп'ютер має деяку систему команд, які може виконати його ЦП. Це і є машинна мова. Вона зовсім не схожа на людську. Програмувати в ній дуже незручно, тому що треба знати численні деталі устрою комп'ютера та писати дуже довгі послідовності простеньких машинних команд. Але виявляється, що майже завжди можна програмувати в іншій, не машинній, мові.

За кілька десятиліть використання комп'ютерів було створено сотні мов, за допомогою яких можна програмувати, не знаючи нічого про устрій комп'ютера і систему його команд. У цих мовах немає машинних команд; їх "команди" містять звичні слова, своєю структурою схожі на людські фрази і ніяк не відбивають деталей устрою комп'ютера. У цих мовах комп'ютер та його дії подано в більш загальному вигляді. Ці мови мають вищий рівень абстракції опису дій комп'ютера, тому називаються мовами високого рівня. Відповідно машинні мови називаються мовами низького рівня.

Однією з найпопулярніших мов високого рівня стала мова Паскаль, або Pascal. Програми в цій мові будемо називати Паскаль-програмами. Ось найкоротша з них:

program A(input, output);

begin end.

Переклад цього тексту з англійської слово в слово такий:

програма A(введення, виведення);

початок кінець.

Слово A перед дужками є ім'ям цієї програми.

Віддаючи данину традиції ознайомлення з мовами програмування, наведемо також Паскаль-програму, за якою комп'ютер "вітає світ":

program Hello(input, output);

begin writeln ( ' Вітаю, Світе! ' ) end.

Вітання задається, як очевидно, написом writeln ( ' Вітаю, Світе! ' ). Слово writeln є скороченням від "write line", тобто "написати рядок".

Комп'ютер не займається виконанням Паскаль-програм – можна навіть сказати, що він "не розуміє" цієї мови. Для виконання Паскаль-програму треба перекласти на мову машини. Цей переклад, або трансляцію в машинну мову, робить сам комп'ютер, виконуючи спеціальну програму перекладу – транслятор. У процесі трансляції Паскаль-програма читається з зовнішнього носія, за нею будується машинна програма й записується, як правило, у зовнішню пам'ять. Паскаль-програма являє собою початкові дані для побудови машинної програми (рис.1.4(а)). Обидві програми задають ті самі дії виконавця, тільки різними мовами.

Як ми вже говорили, машинна програма завантажується в оперативну пам'ять і потім виконується (рис 1.4(б)). Наприклад, виконання машинної програми "вітання світу" веде до появи на екрані слів Вітаю, Світе! .

Інший спосіб зробити Паскаль-програму "зрозумілою" комп'ютеру – інтерпретувати її. Це відбувається за виконання програми, яка називається інтерпретатором. Вхідні дані інтерпретатора – це Паскаль-програма й ті дані, що повинні читатися при її виконанні (рис.1.5). Інтерпретація програми полягає в тім, що дії, нею задані, відразу виконуються. Машинна програма при цьому не створюється.

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

У даному посібнику в основному використовується "чистий" Паскаль, а при необхідності – діалект, що підтримується популярними системами програмування фірми Borland і називається Турбо Паскаль.

В усіх операційних системах файли мають імена, що мають принаймні дві частини, власне ім'я та розширення, відокремлені крапкою. Паскаль-програми записуються, як правило, у файли з розширенням .pas, наприклад, a.pas. У результаті їх трансляції створюються файли з розширенням, як правило, .exe і тим самим ім'ям, наприклад, a.exe. Саме вони містять машинні програми.

Задача

1.1.* Змусьте доступний Вам комп'ютер відтранслювати найкоротшу програму на мові Паскаль. Програма не задає ніяких дій комп'ютера, але довжина файла з машинною програмою не дорівнює нулю. Чому?