ТЕМА: Складання, налагодження та введення програми з використанням динамічних структур даних в системі програмування Borland Pascal 7.0.
МЕТА: Навчиться працювати з динамічними структурами даних мові програмування Паскаль
МЕТОДИЧНІ ВКАЗІВКИ:
Borland Pascal 7.0 дає програмісту можливості виділяти пам’ять для яких небудь даних динамічно, тобто за необхідністю. Використання динамічно розміщених в оперативній пам’яті структур даних (або динамічних структур даних) забезпечує незалежність програм (їх універсальність) від розмірності задач, що розв’язуються, дозволяє виконувати “накладення “ одних структур даних на інщі.
Перед виконанням лабораторної роботи треба вивчити теоретичний матеріал про спеціальний тип даних - покажчики. Вони приймають значення, що дорівнюють адресам розміщення в оперативної пам’яті відповідних змінних. Треба знати яким чином в програмі на мові Паскаль оголошуються покажчики, типи покажчиків, операції які виконуються над покажчиками. Покажчики використовують для створення динамічних структур даних, тобто структур які містять в собі покажчики. Найбільш розповсюджені серед них – списки. Список – це структура кожен елемент якої містить посилання, що зв’язує його з іншим елементом. Треба знати яким чином організується на мові Паскаль списки та як обробляються дані у списках.
СПИСОК ПОСИЛАНЬ:
1. А.Н. Вальвачов, В.С. Крисевич „Программирование на языке Паскаль для персональных ЭВМ»,Минск, Высшая школа, 1989, стр. 108-113
ПОРЯДОК ВИКОАНННЯ ТА ЗМІСТ РОБОТИ:
Завдання: Побудувати динамічну структуру типу список. Інформація для списку згідно вашого індивідуального завдання. Необхідно реалізувати такі процедури:
1. створення списку.
2. друк списку на екран
3. додавання елементу в початок списку, кінець списку
4. пошук запису за даним ключем.
5. вилучення запису із списку.
6. Видалення всього списку
Вибір необхідної процедури користувачем повинен здійснюватися з меню програми. Меню повинне передбачати також вихід з програми.
ХІД РОБОТИ:
1. Скласти програму організації роботи зі списком для вашого завдання.
2. Включити комп’ютер .
3. Після загрузки операційної системи увійти в систему програмування Турбо Паскаль – для цього необхідно двійчи щелкнути мишою на позначці програми, яка знаходиться на Робочому столі Windows.
4. В системі Турбо Паскаль увійти в меню за допомогою миши, вибрати пункт File, увійти в нього и вибрати команду: New – якщо необхідно увести нову програму, і вибрати Open –якщо бажаєте викликати свою вже існуючу програму. Увійти у список файлів (клавіша [Tab]) и з допомогою клавіш управління курсором вибрати необхідний файл і натиснути клавішу [Enter].
5. В окні системи набрати програму або внести необхідні зміни у вашу раніше створену програму
6. Запустити програму на виконання : для цього в меню системи вибрати пункт Run, якщо необхідне виконати налагодження програми.
7. В зошит переписати результат роботи програми ( усі рядки, що були виведені на екран)
8. Вийти з системи Турбо Паскаль – для цього необхідно увійти в меню системи, вибрати пункт File и виконати команду Exit.
ПРИКЛАД ВИКОНАННЯ ЗАВДАННЯ
Побудувати лінійний список, вивести його на екран та реалізувати процедури додавання елементу у список, виведення елементів списку..
Program List_Proc;
Type
Sviaz=^zveno; {Уявлення списка}
Zveno=record {Звено списка}
Elem:integer; {Інформаційна частина }
Sled:sviaz; {Наступний елемент списку}
End;
var
p,t:sviaz;
i:integer;
c:char; n:integer;
procedure Standart; {Повертання до стандартного вікна}
begin
Window(0,0,24,79);
Textbackground(black);
TextColor(white);
Clrscr;
end;
procedure Menu; {Попереджальний опис процедури}
forward;
{Ініціація списку без заглавного звена }
procedure ListInit(var tek:sviaz);
var k:integer;
begin
Standart;
writeln('Spisok iniciirovan.');
tek:=nil;
writeln('Dlia vixoda v menu nasmite ENTER');
readln;
Menu;
end;
{Додавання елементу в початок списка }
procedure DobNach(var tek:sviaz);
var k:integer;
dob:sviaz;
begin
Standart;
writeln('Vvedite elementi spiska 4erez probel do nazatia ENTER');
while not eoln do
begin
read(k);
new(dob);
dob^.elem:=k;
dob^.sled:=tek;
tek:=dob;
end;
writeln('Dlia vixoda v menu nasmite ENTER');
readln;
Menu;
end;
{Додавання елементу у кінець списку без головного звена}
procedure DobKon(var tek:sviaz);
var e:integer;
p, dob:sviaz; { dob – звено,яке додається, р – допоміжний покажчик для пошуку останньогоо елементу в списку }
begin
Standart;
new(dob);
writeln('Vvedite dobavliaemoe v konec zveno spiska ');
readln(e);
dob^.elem:=e;
dob^.sled:=nil;
if tek=nil then tek:=dob else
{пошук останнього елементу в спискі}
begin
p:=tek;
while p^.sled<>nil do p:=p^.sled;
p^.sled:=dob;
end;
writeln('Dlia vixoda v menu nasmite ENTER');
readln;
Menu;
end;
{Друк елементів списку }
procedure Print(tek:sviaz);
begin
Standart;
write('>');
while tek<>nil do
begin
write(tek^.elem);
if tek^.sled<>nil then write(',');
tek:=tek^.sled;
end;
writeln;
writeln('Dlia vixoda v menu nasmite ENTER');
readln;
Menu;
end;
{видалення усіх елементів списку}
procedure DelAll(var tek:sviaz);
var
p:sviaz;
begin
writeln(‘Udalit spisok Y/N?’);
readln ( c );
if c in [‘y’, ‘Y’, ‘n’, ‘N’] then
begin
while tek<>nil do
begin
p:=tek;
tek:=tek^.sled;
dispose(p);
end;
writeln('Spisok Udalen');
end;
writeln('Dlia vixoda v menu nazmite ENTER');
readln;
Menu;
end;
{Створення меню}
procedure Menu;
begin
clrscr;
window(20,8,60,25);
textcolor(red);
Textbackground(yellow);
clrscr;
Gotoxy(10,7);
writeln('MENU');
writeln('1- Sozdanie spiska');
writeln('2- prosmotr spiska');
writeln('3- dobavlenie elementov v na4alo spiska');
writeln('4- dobavlenie v konec spiska');
writeln('5 - Udalenie spiska');
writeln('6- Vixod');
repeat
writeln('Vash vibor');
writeln(' ' );
readln(c);
Until c in ['1','2','3','4','5','6'];
case c of
'1': ListInit(t);
'3': DobNach(t);
'2': Print(t);
'4': DobKon(t);
'5': DelAll(t);
'6': Halt;
end;
end;
{Тіло програми}
BEGIN
Standart;
Menu;
readln;
END.
СКЛАД ЗВІТУ:
1. Тема, мета роботи
2. Зміст та порядок виконання роботи
3. Програма на мові Паскаль
4. Результати роботи програми
5. Висновки по роботі
КОНТРОЛЬНІ ПИТАННЯ:
1. Для чого призначена динамічна пам’ять?
2. Який тип визначений в мові Паскаль для роботи з адресами пам’яті?
3. Що означає Nil?
4. Чим відрізняються статичні змінні від динамічних?
5. Які процедури і функції по роботі з динамічною областю пам’яті ви знаєте?
6. Які динамічні структури даних вам відомі?
7. Охарактеризуйте списки?
8. Охарактеризуйте черги?
9. Охарактеризуйте стек?
10. Чим відрізняються лінійний та двосвязний список?
Індивідуальні завдання до лабораторної роботи № 10:
1,16 Структура “Група”:
№
группи
| Факультет
| Прізвище,
Ім’я, по
батькові
| Рік народження
| Адреса
| Телефон
|
2,17 Структура “Екзаменаційна відомість”:
Прізвище,
Ім’я, по
батькові
| №
залікової
книжки
| Оцінка
| Призвище
викладача
| Дата
|
3,18 Структура “Відомість по зарплаті”:
Місяць
| Прізвище,
Ім’я, по
Батькові
| Посада
| Сума до
виплати
|
4,19 Структура “ Програма телебачення” :
5,20 Структура “Бібліотека” :
Код
| Прізвище, ім’я, по батькові
Автора
| Назва книжки
|
6,21 Структура “Кіоск” :
Код
| Найменування товару
| Ціна
| Дата
Продажу
| Кількість проданих товарів
|
7,22 Структура “Відомість по відрядженню” :
Прізвище,
Ім’я, по
Батькові
| Посада
| Місце
Призначення
| Сума
| Дата
|
8,23 Структура “Реклама товару” :
Найменування
| Виробник
| Ціна
| Кількість
|
9,24 Структура “Нерухомість” :
Метраж
| Кількість
Кімнат
| Адресса
| Район
| Поверх
| Ціна
|
10,25 Структура “ Аптеки” :
Найменування
Ліків
| № аптеки
| Кількість
| Ціна
|
11,26 Структура “Залізниця” :
№ потягу
| Час
Відправлення
| Колія
| Час прибуття
|
12,27 Структура “Телефонна довідка” :
Прізвище, ім’я, по батькові
| Адреса
| № телефону
|
13,28 Структура “Будівельна організація” :
Найменування
Об’єкта
| Бетон
| Цегла
| Бригади
| Термін здачі
|
14,29 Структура “Меблева фабрика” :
Найменування
Товару
| Назва
Моделі
| Ціна
| Кількість
|
15,30 Структура “Фабрика легкої промисловості” :
Найменування
| Стать
| Розмір
| Кількість
| Ціна
|