Метод_ОТтаП_Ч3
.pdfМіністерство освіти і науки України
Національний технічний університет України «Київський політехнічний інститут»
Обчислювальна техніка та алгоритмічні мови. Мова програмування Pascal.
Частина 3
МЕТОДИЧНІ ВКАЗІВКИ
до виконання комп’ютерного практикуму
Київ НТУУ «КПІ»
2011
1
Вступ
Комп’ютерний практикум з дисципліни “Обчислювальна техніка та програмування” проводиться зі студентами напряму підготовки 6.050701 – Електротехніка та електротехнології, спеціальностей 7.05070106 "Системи управління виробництвом та розподілом електроенергії" 7.05070102 «Електричні мережі та системи» денна форма навчання в першому семестрі. Зміст цього посібника відповідає програмі першого семестру. Методичні вказівки Частина 3 містять матеріали п’яти завдань, які виконуються студентами на комп’ютерному практикумі протягом 12 академічних годин з запланованих 36 і являються третьою частиною з запланованих трьох..
В практичній діяльності інженера-електрика все більш необхідною стає обчислювальна техніка. Вона використовується при обробці експериментальних даних, прогнозуванні навантаження, розрахунку режимів роботи електрообладнання, оптимізації режимів, розподіленні ресурсів, проектуванні і при вирішенні багатьох інших завдань сучасної електроенергетики. Більшість спеціальних дисциплін для студентів електроенергетичних спеціальностей базується на знанні алгоритмічних мов і вмінні працювати з персональними комп’ютерами (ПК). Тому основне завдання комп’ютерного практикуму по курсу “Обчислювальна техніка та мови програмування” - набути навичок програмування алгоритмічною мовою Паскаль і навчитися розв‘язувати задачі за допомогою ПК.
Мова Паскаль розроблена Ніклаусом Віртом в 1970 році спеціально для навчання студентів методам процедурного програмування, тому вона, як ніяка інша підходить для навчання початківців. В цих методичних вказівках наведені основні правила синтаксису Паскаль, прийоми алгоритмізації і програмування задач, які найбільш часто зустрічаються в інженерній практиці, а також основні етапи виконання кожної роботи - написання, відлагодження і виконання програми. Підготовку починають з вивчення теоретичного матеріалу по темі. Після цього треба виконати індивідуальне завдання, номер якого відповідає порядковому номеру прізвища студента у списку групи.
Текст програми готують до початку комп’ютерного практикуму, відлагодження і розрахунок виконують в
2
лабораторії. Перевірку правильності одержаних результатів студент здійснює самостійно.
Переконавшись у правильності результатів, студенти оформляють і віддають звіт викладачу. Викладач має право повернути на доопрацювання недбало оформлену або з помилками роботу, а також не зарахувати її, якщо теоретична підготовка студента недостатня.
В загальному випадку процесу розв‘язання задачі на комп’ютері передують наступні підготовчі етапи:
1) постановка і формалізація задач;
2) вибір методу розв’язання;
3) розробка алгоритму;
4) написання програми;
5) від лагодження програми;
6) виконання програми при заданих значеннях вихідних даних. Власне, програмування складається з двох етапів: розробка
алгоритму і написання програми. Запис алгоритму будь-якою алгоритмічною мовою у вигляді програми не викличе труднощів. Особливо важко при підготовці задачі до розв‘язання на ПК розробити і перевірити алгоритм. Чітке визначення алгоритму для програміста малоінформативне, тому дамо його спрощене визначення.
Алгоритмом називають систему формальних правил, яка однозначно веде до розв‘язання даної задачі.
Алгоритм описують у вигляді блок-схем - графічного подання, яке доповнюється елементами словесного запису. Кожний пункт алгоритму відображається на схемі у вигляді умовних графічних позначень - символів. Найбільш уживані символи наведені в таблиці №1. Для зручності опису схем, установлення зв’язків і відношень між їх частинами, всі символи мають наскрізну нумерацію. Послідовність виконання пунктів алгоритму, що описується схемою, встановлюється упорядкованим розміщенням символів на схемі і об’єднанням їх лініями, котрі називаються лініями потоку інформації.
3
Таблиця 1 |
|
|
|
|
|
|
|
|
|
Найменуванн |
Позначення |
Зображена функція |
|||||||
я |
|
|
|
|
|
|
|
|
|
1. |
Блок |
|
Виконання дій, в результаті |
||||||
обчислень |
|
яких |
змінюються |
значення |
|||||
|
|
|
даних |
|
|
|
|
|
|
2. |
Логічний |
|
Вибір |
|
напряму |
виконання |
|||
блок |
|
алгоритму в |
залежності від |
||||||
|
|
|
деяких умов |
|
|
|
|
||
|
|
|
(оператори If або Case) |
||||||
3. |
Блок |
|
Введення-виведення даних |
||||||
введення- |
|
(оператори |
Read, |
|
Readln, |
||||
виведення |
|
Write, Writeln) |
|
|
|
||||
даних |
|
|
|
|
|
|
|
|
|
4. |
Блок |
|
Виведення даних на принтер |
||||||
виведення |
|
|
|
|
|
|
|
|
|
даних на друк |
|
|
|
|
|
|
|
|
|
5. |
Пуск- |
|
Початок |
чи |
кінець |
|
обробки |
||
зупинка |
|
даних |
|
|
|
|
|
|
|
6. |
З’єднувач |
|
Позначення зв’язків між |
||||||
|
|
|
частинами |
|
блок-схеми, |
||||
|
|
|
розташованими |
на |
|
одному |
|||
|
|
|
аркуші |
|
|
|
|
|
|
7. |
Міжсторін- |
|
Позначення зв’язків між |
||||||
ковий |
|
частинами |
|
блок-схеми, |
|||||
з’єднувач |
|
розташованими |
на |
|
різних |
||||
|
|
|
сторінках |
|
|
|
|
||
8. |
Цикл |
|
Повторення операцій |
|
|||||
|
|
|
(оператори |
For, |
|
While, |
|||
|
|
|
Repeat) |
|
|
|
|
|
Зміст звіту
Звіт оформляється на аркушах формату А4 і починається з титульного аркуша (див. додаток).
4
Заняття №11 Операції із бітами.
Мета роботи – набуття навичок роботи з бітовою арифметикою.
11.1. Теоретичні відомості.
Разом із звичайними операціями із змінними логічного типу Boolean, часто необхідно виконувати операції із окремими бітами (що часто використовуються в якості прапорів).
Біт – це найбільш поширена одиниця вимірювання інформації, яка є двійковим логарифмом вірогідності і може приймати лише два значення: «1» або «0» («true» або «false»). 8 біт складають 1 байт інформації, 2 байта інформації складають 1 слово.
Системи числення
Для того, щоб оперувати інформацією, що вимірюється в бітах необхідно перейти з десяткової системи числення у двійкову. Тобто, якщо у «звичній» десятковій системі числення використовується 10 цифр: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 (основа системи число 10), то у двійковій – всього дві: 0 та 1 (основа системи число 2 ). При цьому певна комбінація нулів та одиниць буде еквівалентне певному числу у десятковій системі числення
(див. табл. 9.1).
Для того, щоб перейти від десяткової системи до двійкової необхідно:
– завдане число розділити на 2 (на основу системи) із залишком (в залишку або «1», або «0»);
– отримане число знов розділити на 2 із залишком (цю операцію повторювати поки результат ділення не буде становити «1»);
– записати останній результат ділення, а потім усі залишки від попередніх ділень з право наліво.
5
Наприклад: потрібно перевести десяткове число 421 у двійкове
4212 = 210(залишок 1)
2102 =105(залишок 0)
1052 =52(залишок 1)
522 = 26(залишок 0)
232 =13(залишок 0)
132 =6(залишок 1)
62 =3(залишок 0)
3 =1(залишок 1)
2
звідси у двійковій системі отримали 110100101.
Для того, щоб навпаки перевести число з двійкової системи у десяткову необхідно
– помножити кожну цифру двійкового числа на 2 у ступені, що дорівнює номеру її позиції (рахувати з право наліво починаючи з 0);
– скласти усі отримані значення.
Наприклад: потрібно перевести двійкове число 110100101 у десяткове
1 28 +1 27 +0 26 +1 25 +0 24 +0 23 +1 22 +0 21 +1 20 =. = 256 +128 +32 +4 +1 = 421
Оскільки інформація також вимірюється в байтах та машинних словах, то часто користуються не двійковою системою числення, а вісімковою (основа системи число 8) або шістнадцятковою (основа системи число 16) – див. табл. 11.1. Алгоритм переводу десяткового числа у вісімкове або шістнадцяткове такий самий, як і для двійкових чисел (те саме і у зворотному напрямку), лише ділити треба вже на 8 або, відповідно, 16 (у зворотному напрямку – до ступеню треба підносити 8 або 16).
Наприклад: потрібно перевести шістнадцяткове число 92C8 у десяткове
6
9 163 +2 162 +C 161 +8 160 =9 163 +2 162 +12 161 +8 160 = . =36864+512+192+8=37576
Таблиця 11.1. Відповідність систем числення. |
|
||
десяткова |
двійкова |
Вісімкова |
шістнадцятько |
система |
система |
система |
ва система |
0 |
0000 |
0 |
0 |
1 |
0001 |
1 |
1 |
2 |
0010 |
2 |
2 |
3 |
0011 |
3 |
3 |
4 |
0100 |
4 |
4 |
5 |
0101 |
5 |
5 |
6 |
0110 |
6 |
6 |
7 |
0111 |
7 |
7 |
8 |
1000 |
10 |
8 |
9 |
1001 |
11 |
9 |
10 |
1010 |
12 |
A |
11 |
1011 |
13 |
B |
12 |
1100 |
14 |
C |
13 |
1101 |
15 |
D |
14 |
1110 |
16 |
E |
15 |
1111 |
17 |
F |
Перевід з двійкової системи у вісімкову або шістнадцяткову |
||||
набагато простіший – для вісімкового числа кожну тріаду (по 3 |
||||
біта), а для шістнадцяткового числа кожну тетроду (по 4 біта) |
||||
замінити відповідним двійковим значенням числа. |
||||
Наприклад: потрібно перевести двійкове число 10101001 у |
||||
вісімкове та шістнадцяткове |
|
|
||
у вісімковій |
у шістнадцятьковій |
|||
10 |
101 |
001 |
1010 |
1001 |
↓ |
↓ |
↓ |
↓ |
↓ |
2 |
5 |
1 |
А |
9 |
У будь-якій системі числення можна виконувати алгебраїчні дії із числами, тобто додати, відняти, помножити та розділити.
Наприклад:
1) потрібно скласти два числа 141,5 та 59,75 у різних системах числення
7
у десятковій |
у двійковій |
у вісімковій |
у шістнадцятьковій |
2)потрібно відняти число 59,75 від числа 201,25 у різних системах числення
удесятковій у двійковій
у вісімковій |
у шістнадцятьковій |
Щодо множення та ділення, то тут є певні особливості для |
|
двійкових чисел. Тут при множенні слід пам’ятати, що |
|
0 * 0 = 0, |
|
0 * 1 = 0, |
|
1 * 1 = 1. |
|
Тоді множення в двійковій системі зводиться лише до зсувів та |
|
додаванням. |
|
Наприклад: потрібно помножити число 115 на число 51 у |
|
двійковій системі |
|
115 → 1110011; |
51 → 110011, тоді |
|
8 |
Відповідь 1011011101001, або 7701 у десятковій системі.
Бітові операції
Умові PASCAL роль бітових типів виконують цілі типи без знаку byte і word. Над цими типами окрім операцій, які допускаються із іншими числовими типами, можна виконувати побітові логічні операції, за допомогою яких можна, в тому числі, реалізувати дії із двійковими числами.
Операція AND – логічне «І». Логічно складаються біти різних чисел, що стоять на однакових позиціях. Тобто, якщо обидва біта дорівнюють 1, то результат 1, але якщо хоча б один з них дорівнює 0, то результат 0.
<ідентифікатор 1> AND <ідентифікатор 2>
Наприклад:
AND 00110101 0001
Операція OR – логічне «АБО». Логічно множаться біти різних чисел, що стоять на однакових позиціях. Тобто, якщо хоча б один з бітів дорівнює 1, то результат 1.
<ідентифікатор 1> OR <ідентифікатор 2>
Наприклад:
OR
0011
0101
0111
Операція XOR – логічне «АБО» з виключенням. Це логічне «АБО», що виключає. Тут, якщо біти, що порівнюються однакові, то результат 0, інакше – результат 1.
<ідентифікатор 1> XOR <ідентифікатор 2>
9
Наприклад:
XOR 00110101 0110
Операція NOT – заперечення (або інверсія біта). Біти інвертуються. Тобто замість 0 записується 1 і навпаки – замість 1 записується 0.
NOT <ідентифікатор>
Наприклад:
NOT 0011 1100
Операція SHL – логічний зсув вліво. Усі біти числа зсуваються вліво, а з права дописуються «0» у кількості на яку відбувся зсув.
<ідентифікатор > SHL <кількість біт, що зсуваються>
Наприклад: 00001111 SHL 2 = 00111100
Операція SHR – логічний зсув вправо. Усі біти числа зсуваються вправо, а з ліва дописуються «0» у кількості на яку відбувся зсув.
<ідентифікатор > SHR <кількість біт, що зсуваються>
Наприклад:
11101111 SHR 3 = 00011101
При програмуванні у мові PASCAL для вводу бітового числа з клавіатури можна використовувати змінні типу string. Цей тип фактично є пакованим масивом з елементами символьного типу, тобто
еквівалентно
a : packed array [m..n] of char, де m < n.
Таким чином при введені строки кожний її символ читається окремо. Ця властивість дозволяє у числі (змінна типу string) одразу визначити позицію кожної цифри, тобто визначити кожний байт.
10
Наприклад: потрібно вивести його у зворотному напрямку число…у двійковому форматі
var s:string;
…
BEGIN
…
readln(s);
n:= Length(s); {визначити кількість введених байтів}
…
for i:=n downto 1 do write(s[i]);
…
11.2. Приклад.
Завдання. Перевести число з десяткової системи числення до вісімкової.
Розв'язання у вигляді блок схеми алгоритма:
початок
ввести
десяткове число n
і = 15, 1 |
s [i] := залишок від (n/2) ; |
n := ціла частина від (n/2); |
вивести
вісімкове число s
кінець
Рис. 11.1
11
Програма: program conv; const
osn8=8; {вісімкова основа}
var len8=5; {кількість вісімкових позицій}
BEGIN
n,i,n10:integer; s:array[1..len8] of byte;
write(' Введіть десяткове ціле число '); readln(n10);
write(' Вісімкова форма '); n:=n10;
for i:=len8 downto 1 do begin
s[i]:=n mod osn8; {обчислення значення наступного розряду}
n:=n div osn8; {зсув на один розряд вліво }
end;
for i:= 1 to len8 do write(s[i]); {вивід результату }
END.readln;
11.3. Індивідуальні завдання
Cкласти алгоритм i програму розв’язання задач
1.Скласти програму, яка переводить число А з десяткової системи числення в двійкову, використовуючи метод ділення в стовпчик. Проміжні і остаточні результати переводу відобразити на екрані. Число А вводиться з клавіатури в десятковому форматі.
2.Написати програму, яка формує з 8-ми розрядної двійкової кодовій комбінації B1B2B3B4B5B6B7B8 16-ти розрядну таким чином: якщо розряд в початковій кодовій комбінації дорівнює «1», то він замінюється на «10», якщо розряд в початковій кодовій комбінації дорівнює «0», то він
12
замінюється на «01». Наприклад, кодова комбінація
«1010101» перейде в «10011001100110». Двійкові числа вводяться з клавіатури в двійковому форматі. Вивести значення 16-ти розрядній кодовій комбінації на екран.
3.Ввести з клавіатури послідовність N однобайтних чисел в шістнадцятковому форматі. Обчислити контрольну суму цієї послідовності, використовуючи наступну рекурентну формулу:
B[N+1]=B[N+1] xor (B[i] xor 30h) якщо i парне; B[N+1]=B[N+1] and (B[i] or 30h) якщо i непарне.
Вивести на екран послідовність B[i] і контрольну суму
B[N+1].
4.Скласти програму, яка переводить двійкове число А в шістнадцяткове число. Проміжні і остаточні результати перекладу відобразити на екрані. Число А вводиться з клавіатури в двійковому форматі.
5.Ввести з клавіатури два числа: однобайтне двійкове число А і десяткове число k. Написати програму множення числа А на число 2k. Вивести проміжні і остаточні результати множення на екран. Число А вводиться з клавіатури в двійковому форматі.
6.Скласти програму, яка переводить число А, задане в двійковій системі числення, в число представлене в десятковій. Проміжні і остаточні результати перекладу відобразити на екрані. Число А вводиться з клавіатури в двійковому форматі.
7.Написати програму, яка формує 8-ми розрядну двійкову кодову комбінацію B1B2B3B4B5B6B7B8 по введеним користувачем значенням п'ятого, шостого, сьомого і восьмого розрядів. Решта (контрольні) розрядів кодової комбінації визначається як інверсія до останніх чотирьох розрядів. Двійкові числа вводяться з клавіатури в двійковому форматі. Вивести значення контрольних розрядів і кодову комбінацію в цілому на екран.
13
8.Написати програму, яка формує 8-ми розрядну двійкову кодову комбінацію B1B2B3B4B5B6B7B8 по введеним користувачем значенням другого, третього, п'ятого і восьмого розрядів. Решта (контрольні) розрядів кодової комбінації визначається по наступних формулах:
B1=B2+B3+B5+B8
B4=B2+B3+B5
B6=B5+B8
B7=B2+B6+B8
Знак «+» означає суму по модулю 2. Двійкові числа вводяться з клавіатури в двійковому форматі. Вивести значення контрольних розрядів і кодову комбінацію в цілому на екран.
9.Ввести з клавіатури два числа: двійкове число А і десяткове число k. Написати програму ділення числа А на число 2k. Вивести проміжні і остаточні результати ділення на екран. Число А вводиться з клавіатури в двійковому форматі.
10.Скласти програму, яка переводить вісімкове число А в десяткове число. Вивести проміжні і остаточні результати перекладу на екран. Число А вводиться з клавіатури у вісімковому форматі.
11.Ввести k-розрядне двійкове число А. Написати програму, що визначає суму розрядів цього числа по модулю два. Число А вводиться з клавіатури в двійковому форматі.
12.Ввести з клавіатури двійкове k-розрядне число А. Запісати в (k-1) -й розряд числа А цифру «1», якщо кількість одиниць в двійковому числі парне, інакше записати цифру «0». Число А вводиться з клавіатури в двійковому форматі.
13.Використовуючи тільки операції однобайтного складання, віднімання і зсуву скласти програму для обчислення наступного виразу:
(0720h+7h)*24+FFFh/25.
Вивести проміжні і остаточні результати обчислення на екран.
14.Ввести з клавіатури два однобайтні двійкові числа. Вивести на екран номера і значення тих бітів, якими вони
14
відрізняються. Двійкові числа вводяться з клавіатури в двійковому форматі.
15.Написати програму множення двох однобайтних чисел, використовуючи тільки операції однобайтного множення, складання, віднімання і зсуву. Результат у вигляді двобайтового числа вивести на екран.
16.Скласти програму, яка переводить вісімкове число А в шістнадцяткове число. Вивести проміжні і остаточні результати перекладу на екран. Число А вводиться з клавіатури у вісімковому форматі.
17.Ввести з клавіатури два трибайтних двійкових числа. Вивести на екран номера і значення тих бітів, які у них однакові. Двійкові числа вводяться з клавіатури в двійковому форматі
18.Ввести з клавіатури послідовність N однобайтних чисел в шістнадцятковому форматі. Обчислити контрольну суму цієї послідовності, використовуючи наступну рекурентну формулу:
B[N+1]=B[N+1] and (B[i] or 25h) якщо i парне; B[N+1]=B[N+1] or (B[i] xor 25h) якщо i непарне.
Вивести на екран послідовність B[i] і контрольну суму
B[N+1].
19.Скласти програму, яка переводить число А з десяткової системи числення у вісімкову, використовуючи метод ділення в стовпчик. Проміжні і остаточні результати перекладу відобразити на екрані. Число А вводиться з клавіатури в десятковому форматі.
20.Написати програму множення двох двобайтових чисел, використовуючи тільки операції однобайтного множення, складання, віднімання і зсуву. Результат у вигляді чотирьохбайтного числа вивести на екран.
21.Використовуючи тільки операції однобайтного складання, віднімання і зсуву скласти програму для обчислення наступного виразу:
(0817h+9h)*26+EFBFh/27. 15
Вивести проміжні і остаточні результати перекладу на екран.
22.Скласти програму, яка переводить число А з десяткової системи числення в шістнадцяткову, використовуючи метод ділення в стовпчик. Проміжні і остаточні результати перекладу відобразити на екрані. Число А вводиться з клавіатури в десятковому форматі.
23.Ввести з клавіатури двійкове k-розрядне число А. Записати в (k-3)-й розряд числа А цифру «1», якщо кількість одиниць в двійковому числі непарне, інакше записати цифру «0». Число А вводиться з клавіатури в двійковому форматі.
24.Скласти програму, яка переводить число А з шістнадцяткової системи числення в десяткову. Проміжні і остаточні результати перекладу відобразити на екрані. Число А вводиться з клавіатури в шістнадцятковому форматі.
25.Написати програму, яка формує 8-ми розрядну двійкову кодову комбінацію B1B2B3B4B5B6B7B8 по введеним користувачем значенням першого, п'ятого, шостого і сьомого розрядів. Решта (контрольні) розрядів кодової комбінації визначається по наступних формулах:
B2=B1+B5+B7
B3=B6+B5
B4=B1+B7
B8=B1+B5+B6+B7
Знак «+» означає суму по модулю 2. Двійкові числа вводяться з клавіатури в двійковому форматі. Вивести значення контрольних розрядів і кодову комбінацію в цілому на екран.
26.Написати програму, яка формує 8-ми розрядну двійкову кодову комбінацію B1B2B3B4B5B6B7B8 по введеним користувачем значенням першого, другого, третього і четвертого розрядів. Решта (контрольні) розрядів кодової комбінації визначається як інверсія до перших чотирьох розрядів. Двійкові числа вводяться з клавіатури в двійковому форматі. Вивести значення контрольних розрядів і кодову комбінацію в цілому на екран.
16
27. Написати програму, яка формує з 8-ми розрядній двійковій |
8. Які команди мови PASCAL |
для роботи із бітовою |
|
|
кодовій комбінації B1B2B3B4B5B6B7B8 16-ти розрядну |
арифметикою Ви знаєте? Яке їх |
призначення? |
|
таким чином: якщо розряд в початковій кодовій комбінації |
9. Яким чином можна вводити бітове число при програмування у |
|
|
рівний «1», то він замінюється на «11», якщо розряд в |
мові PASCAL? |
|
|
початковій кодовій комбінації рівний «0», то він замінюється |
|
|
|
на «00». Наприклад, кодова комбінація «1010101» перейде в |
|
|
|
«11001100110011». Двійкові числа вводяться з клавіатури в |
|
|
|
двійковому форматі. Вивести значення 16-ти розрядній |
|
|
|
кодовій комбінації на екран. |
|
|
28. |
Ввести з клавіатури двійкове k-розрядне число А. Записати в |
|
|
|
(k-2) -й розряд числа А цифру «1», якщо кількість одиниць в |
|
|
|
двійковому числі кратне 3, інакше записати цифру «0». Число |
|
|
|
А вводиться з клавіатури в двійковому форматі. |
|
|
29. |
Ввести однобайтне двійкове число А. поменять місцями його |
|
|
|
нібли (нібла -чотири двійкові розряди). Число А вводиться з |
|
|
|
клавіатури в двійковому форматі. |
|
|
30. Використовуючи тільки операції однобайтного складання, |
|
|
|
|
віднімання і зсуву скласти програму для обчислення |
|
|
|
наступного виразу: |
|
|
|
(АE24h+F7h)*24+FBCh/22. |
|
|
|
Вивести проміжні і остаточні результати обчислення на |
|
|
|
екран. |
|
|
11.4.Контрольні запитання
1.Що Ви знаєте про одиниці вимірювання інформації?
2.Яки системи числення Ви знаєте? Чим вони різняться?
3.Як переводити число з десяткової системи числення до іншої (наприклад, вісімкової)?
4.Як переводити число до десяткової системи числення з іншої (наприклад двійкової)?
5.Як переводити число з двійкової системи числення у шістнадцяткову?
6.Яким чином відбувається додавання (чи віднімання) у двійковій (вісімковій, шістнадцятьковій) системі числення?
7.Яким чином відбувається множення (ділення) у двійковій системі числення?
17 |
18 |
12. Заняття №12
Записи. Масиви записів. Сортування записів.
Мета роботи - Ознайомитись з поняттям «Запис», навчитися основним діям з записами при написані програм.
12.1. Теоретичні відомості
12.1.1. Записи
Запис являє собою сукупність обмеженого числа логічно пов'язаних компонент, що належать до різних типів. Компоненти запису називаються полями, кожне з яких визначається ім'ям. Поле запису містить ім'я поля, слідом за яким через двокрапку вказується тип цього поля. Поля запису можуть належати до будь-якого типу, допустимого в мові Паскаль, за винятком файлового типу.
Опис запису в мові Pascal здійснюється за допомогою службового слова RECORD, слідом за яким описуються компоненти запису. Завершується опис запису службовим словом
END.Type <ім’я запису> = Record
<ім’я поля 1> : <тип>; <ім’я поля 1> : <тип>;
……………………………………………
<ім’я поля 1> : <тип>; END;
Наприклад, записна книжка містить фамілії, ініціали та номери телефону, тому окрему строку в записній книжці зручно представити у вигляді наступного запису:
Type RowPhon = Record
FIO: string[20];
TEL: String[7];
END;
Var str : RowPhon;
Звернення до запису в цілому допускається тільки в операторах привласнення, де ліворуч і праворуч від знака присвоювання використовуються імена записів однакового типу.
19
У всіх інших випадках оперують окремими полями записів. Щоб звернутися до окремої компоненті запису, необхідно задати ім'я запису і через точку вказати ім'я потрібного поля, наприклад:
str.FIO; str.TEL;
Таке ім'я називається складовим. Компонентою запису може бути також запис, в такому випадку складений ім'я буде містити не дві, а більша кількість імен.
Імена компонентів всередині записи не повинні повторюватися. Значення запису можна пересилати в інші змінні - записи за допомогою операторів присвоювання. Повертаючись до розглянутого прикладу, можна записати:
Type RowPhon = Record
FIO: string[20];
TEL: String[7];
END;
Var Z1,Z2 : RowPhon;
Begin
-------------------------------------
Z1 := Z2;
Вказаний у програмі оператор присвоєння еквівалентний таким операторам :
Z1.FIO := Z2.FIO;
Z1.TEL := Z2.TEL;
12.1.2. Масиви записів
Якщо необхідно зберегти інформацію про декількох людей в записній книжці, то можна ввести масив записів:
Var TBL: array[1..1000] of RowPhon
Складемо програму для знаходження середнього балу для кожного студента групи, що складається з 25 чоловік.
Program BAL;
Type STR = Record
FIO: string[20];
B1,B2,B3,B4,B5: 1..5;
End;SB: real; { середній бал }
20