Власне кажучи, нас в даний момент цікавить саме перший і останній процес спілкування між диригентом (програмістом) і музикантом (ПЕОМ). Саме цей розділ спілкування називають в програмуванні організацією вводу–виводу інформації. В умовах мови програмування Pascal та нашої гри цій меті служать дві команди, або як ще іноді кажуть дві інструкції: Read (Readln) та Write (Writeln), які на зрозумілу нам українську мову переводяться як прочитати (отримати) та написати (вивести, надрукувати) необхідні дані. Закінчення “–ln ” в деяких варіантах команд трактується як “перейти на новий рядок” (скорочення від англійського – line new).
В процесі вводу та виводу в одній інструкції можна перераховувати необхідні константи, змінні, повідомлення і т.д., перераховуючи їх через кому. Так, наприклад, повідомлення виду
Write(s1, t, ’ дані про особу ’, man);
вказує на те, що на екран комп’ютера будуть виведені значення змінних sl, t, після чого буде написана фраза ” дані про особу ” і в кінці надруковано значення змінної man. Відсутність вище вказаного закінчення “–ln ” говорить про те, що подальші повідомлення будуть виводитись на екран саме в цьому рядку, а не в іншому місці. Уважні читачі мабуть вже самі помітили, що між символами ’ ’ можуть стояти будь–які повідомлення на довільній розмовній мові, найбільш зрозумілій користувачу або програмісту.
|
|
При виводі повідомлень на екран ПЕОМ ми маємо змогу виводити інформацію в такому вигляді, в якому нам потрібно. Для цієї мети в Паскалі передбачено форматування числових значень змінної, яке в загальному випадку записується так:
write(s:n:m); {s – змінна типу real, а n,m – integer}
де n – кількість цифр у всьому числі;
m – кількість значущих цифр у дробовій частині змінної.
Якщо загальна кількість цифр вказана меншою, ніж потрібно при виводі з вказаною кількістю цифр після коми, то компілятор Паскаля автоматично додає необхідну кількість значущих цифр. Наприклад, вираз
write(10*pi:1:3);
повинен по ідеї вивести тільки одну цифру, але виконання програми:
program demowrite1;
uses crt;
begin
clrscr; { очистити екран }
write(10*pi:1:3);
readln;
end.
дає на екрані монітору результат 31.416.
Зверніть увагу на фразу uses crt; перед початком програми. Ця фраза повідомляє, що до нашої програми автоматично підключається модуль crt. Модуль – це додаткова програма, яка підключається до вашої програми. Існують стандартні модулі, до яких відноситься і модуль crt, крім того кожен програміст може створювати власні модулі, які ще прийнято називати бібліотеками, і підключати їх до своїх програм. Зроблено це для того, щоб зменшити об’єм програми, яку потрібно написати, і мати можливість використовувати раніше написані програми багато разів. З питання створення власних модулів рекомендуємо звернутись до технічної документації, яка поставляється фірмою – розробником разом з компілятором Паскаля.
|
|
Ми ж лише вкажемо на деякі операції, що містяться в згадуваному модулі crt:
n ClrScr – очищення екрану монітору;
Рис. 1 |
n Gotoxy(x,y) – встановити курсор на екрані у точці з координатами (х,у). Тут потрібно сказати про координати екрану. Екранна система координат має вигляд, як показано на рис. 1. Зверніть увагу, що початок координат знаходиться в лівому верхньому куті екрану. Крім того, вісь ОY направлена вниз. У текстовому режимі значення координат змінюються в межах:
0 _ х _ 79
0 _ у _ 24
тобто можна виводити 80 символів по осі ОХ і всього 25 рядків.
Крім того, графічний екран відокремлено від текстового, тому до цього рисунку ми повернемось, коли будемо розглядати графічні команди.
n TextColor (color);– встановлює колір літер тексту.
Кольори можна задавати або назвою кольору (на англійській мові), яку Паскаль–програма розуміє, або їх номером. Значення кольорів приведено у таблиці 2:
№ кольору | Ім’я кольору | Значення кольору |
Black | чорний | |
Blue | синій | |
Green | зелений | |
Cyan | голубий | |
Red | червоний | |
Magenta | фіолетовий | |
Brown | коричневий | |
LightGrey | світлосірий | |
DarkGrey | темносірий | |
LightBlue | світлосиній | |
LightGreen | світлозелений | |
LightCayn | світлоголубий | |
LightRed | рожевий | |
LightMagenta | бузковий | |
Yellow | жовтий | |
White | білий |
Таблиця 2. Значення кольорів у модулі crt.
А взагалі слід відмітити, що значення параметру Color може змінюватись в межах від 0 до 255, в залежності від типу монітору (CGA, EGA, VGA і т.д.), і навіть в більших.
n TextBackGround (color); – встановлює колір для фону символів.
n Delay (Time); – затримка тривалості виконання програми. Одночасно може виконувати роль тривалості звукового сигналу (див. нижче).
n Sound (n); – подання звукового сигналу частоти n на вмонтований в ПЕОМ внутрішній динамік (не путайте з Sound – картою!).
n NoSound; – відключення звукового сигналу.
Рекомендуємо вам самостійно поексперементувати з даними процедурами модуля. Робота видасться для вас цікавою, якщо ви тільки почали вивчати Паскаль, якщо ж ви вже знайомі з Паскалем, то робота з модулем crt для вас давно знайома і проблем не може бути.
Про те, як здійснювати операції вводу не з клавіатури та виводу не на екран, ми розповімо на наступних сторінках у відповідних розділах, пов’язаних з організацією роботи з файлами та периферійними пристроями. Остання фраза читачам, що вперше читають книгу з програмування може здатись трохи не зрозумілою, але повірте, що вам також через деякий час це стане повністю зрозумілим.
Ми ж зараз, дещо випереджуючи події, розглянемо введення даних з текстового файлу і виведення даних у текстовий файл. Таке випередження ми можемо пояснити тим, що у багатьох завданнях, що будуть розглядатись далі, нам прийдеться зчитувати інформацію з текстового файлу або записувати у нього результати роботи програми. Для розгляду організації такої роботи знову звернемось до аналогій. Уявіть собі, що вам для розв’язку фізичної задачі необхідно знайти у довіднику значення деякої величини, наприклад, густини заліза. Для цього нам потрібно взяти в руки довідник з фізики, відкрити його і прочитати необхідні дані. Після цього нам залишиться лише закрити відкритий довідник і продовжувати далі розв’язувати задачу. Аналогом книги є текстовий файл і робота з ним повністю відповідає описаному вище способу роботи з довідником. Для повноти картини сформулюємо і розв’яжемо задачу, у якій і вкажемо команди для роботи з текстовими файлами.
Задача 2. 2. У текстовому файлі DANO.TXT знаходиться значення радіусу кулі. Записати у текстовий файл RESULT.TXT значення її об’єму.
|
|
Розв’язання: Наведемо програму, що вирішує дане завдання, а в коментарях до неї приведемо необхідні пояснення.
program demo_file;
var f: text; { файлова змiнна для текстового файлу }
R, V: real; { змінні для радіусу і об’єму }
begin
Assign(f,'DANO.TXT'); {Поставили у відповідність файловій змінній ім’я файлу }
Reset(f); { Відкрили файли тільки для читання }
Readln(f,R); { Прочитали з файлу значення змінної }
Close(f); { Закрили файл }
V:= (4*pi*R*R*R)/3; { Обчислили об’єм }
Assign(f,'RESULT.TXT'); { Поставили у від–ність файловій змінній новий файл }
Rewrite(f); { Відкрили його для запису }
Write(f,V:5:3); { Записали у файл значення об’єму }
Close(f); { Закрили файл }
end.
Як бачите, нічого складного немає, потрібно тільки запам’ятати, що всі три дії є обов’язковими, тобто:
n спочатку ставимо у відповідність файловій змінній ім’я файлу: Assign(f, ’DANO.TXT’);
n відкриваємо файл для читання: Reset(f); або для запису: Rewrite(f);
n зчитуємо або записуємо необхідні дані;
n по закінченню роботи закриваємо файл: Close(f);.
Для повноти картини звернемо увагу на той факт, що якщо файли розміщуються не в поточній директорії, то при встановленні відповідності між файловою змінною і назвою файлу необхідно вказувати також і повний шлях до файлу, наприклад:
Assign(f, ’A:\WORK\DANO.TXT’);
Для повного засвоєння даного матеріалу рекомендуємо самостійно спробувати зчитати з текстового файлу та записати у текстовий файл деяку інформацію. Вид інформації та назви файлів придумайте самі.
Вправи та завдання
3. 3. Вкажіть вірні імена змінних серед нижче приведених:
а) proba; б) _fire_; в) 5_step;
г) BoX; д) fi_re; е) step_5;
є) 5BoX; ж) maMa; з) _step_5;
4. 4. Які з приведених нижче послідовностей символів є операторами присвоювання:
а) a:= b; б) a = a+1; в) a:b–sqr(2);
г) a * x + b:= 0; д) z:= 0; е) z:= z+1;
є) z:= z + 1,2; ж) y:= y; з) –y:= y?
5. 5. Вкажіть серед нижче написаної програми рядки з помилками:
{програма знаходить суму двох чисел,
введених з клавіатури }
program summa 2;
begin
a b S: integer;
a:= 5;
b:= a–2;
S = a + b;
writeln(' Сума = ' S);
end.
6. 6. Які з наступних послідовностей символів є операторами вводу:
|
|
а) read(x, y, z); б) read x, y, z; в) read(x);
г) x:= read(x); д) read(a; b); е) read(a, b+c);
7. 7. Задати у вигляді оператора присвоювання наступні дії:
а) змінній х присвоїти значення, що дорівнює півсумі значень змінних х та у;
б) подвоїти значення змінної а;
в) значення змінної х збільшити на 0,1;
г) змінити знак значення змінної t.
8. 8. Які з наступних послідовностей символів є операторами виведення:
а) write(x, y); б) write x, y, z; в) print x;
г) write(100); д) read(a; b); е) write(x, x+10,2);