русс | укр

Мови програмуванняВідео уроки php mysqlПаскальСіАсемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование


Linux Unix Алгоритмічні мови Архітектура мікроконтролерів Введення в розробку розподілених інформаційних систем Дискретна математика Інформаційне обслуговування користувачів Інформація та моделювання в управлінні виробництвом Комп'ютерна графіка Лекції


ЭКОНОМИЧЕСКОЕ МОДЕЛИРОВАНИЕ 6 страница


Дата додавання: 2014-11-27; переглядів: 889.


Стандартний файл введення Input і виведення Output пов'язувати з файловою змінною, відкривати і закривати не потрібно.

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

Для контролю правильності операцій введення-виведення в Turbo Pascal за­про­ваджена функція IOResult (Input/Output Result – результат введення-вн­ве­ден­ня), яка доступна тільки тоді, коли встановлена директива компілятора {$I-}. Функція не має аргументів. Вона повертає значення 0 у тому випадку, якщо ос­та­н­ня операція введення-виведення завершилася успішно, і ненульовий код по­милки в протилежному випадку.

Процедура Assign. Опис процедури: Assign(f; Name : string) .

Параметр f є файловою зміною будь-якого типу файла, a Name – вираз ряд­кового типу. Всі подальші файлові операції, де фігурує змінна f, будуть викону­ва­тися з зовнішнім файлом з ім’ям, яке задається параметром Name. Після звер­та­н­­ня до процедури Assign зв'язок, встановлений між змінної f і зовнішнім файлом, буде існувати доти, поки не буде виконана інша процедура Assign для змін­ної f. Ім'я складається зі шляху доступу і імені файла: Диск:\ім'я каталога\ім'я каталога\ ...\ім'я каталога\ім'я файла. Коли параметр Name є порожнім рядком, то параметр f зв'язується зі стандартним файлом введення (Input) чи виведення (Output). Процедура Assign не повинна використовуватися для відкритого файла.

Процедура Close. Ця процедура закриває відкритий файл.

Опис процедури : Close(f) . Параметр f – файлова змінна будь-якого файла, що був попередньо відкритий за допомогою процедур Reset, Rewrite чи Append. Ця про­цедура забезпечує збере­жен­ня у файлі всіх записів і реєстрацію файла в ката­ло­зі. Зв'язок між змінною фай­лового типу і файлом розривається і файлова зміна мо­же використовуватись для роботи з іншим файлом такого ж типу.

Процедура Reset. Ця процедура відкриває існуючий файл. Опис процедури має вигляд: Reset(f; [Size : word] ). Параметр f – файлова змінна, що відповідає будь-якому типу файла. Файлова змінна повинна бути зв’язана із зовнішнім фай­­лом процедурою Assign. Параметр Size – це необов’язковий вираз довжи­ною в слово, який може вказуватися тільки в тому випадку, якщо f є нетипізованим фай­лом. Процедура Reset відкриває існуючий зовнішній файл, ім'я якого було пов’язане з файловою змінною f. Якщо файл уже відкритий, то він спочатку закривається, а потім відкривається знову. Поточний вказівник встановлю­єть­ся на початок файла і стає рівним нулю. Якщо файл текстовий, то він стає доступним тільки для читання. Якщо файл нетипізований, то параметр Size визначає розмір запису, що повинен використовуватися при передачі даних. Якщо цей параметр відсутній, то він за замовчуванням дорівнює 128 байтам.

Процедура Rewrite. Ця процедура створює і відкриває новий файл або очищує ста­рий файл. Опис процедури має вигляд: Rewrite(f: file; [Size : word] ). Параметр f – файлова змінна, що пов'язана за допомогою процедури Assign з файлом будь-яко­го типу. Параметр Size – необов'язковий вираз довжиною в слово, який може вка­зуватися тільки в тому випадку, якщо f є нетипізованим файлом. Процедура Rewrite створює новий файл, ім’я якого вказано в процедурі Assign. Якщо зовніш­ній файл із таким ім’ям вже існує, то він витирається і на його місці створюється новий порожній файл. Якщо файл уже відкритий, то він спочатку закривається, а потім відкривається зно­ву. Поточний вказівник встановлюється на початок файла і стає рівним нулю. Якщо файл – тек­с­то­вий, то він стає доступним тільки для запи­су. Якщо файл – нетипізований, то параметр Size ви­зна­чає розмір запису файла. Якщо цей параметр відсутній, то він дорівнює по замовчуванню 128 байтам.

Функції Eof, Eoln. Функція Eof відслідковує кінець файла, пов’язаного з фай­ло­вою змінною f. Опис процедури має вигляд: Eof(f):boolean . Параметр f є файловою змінною для файла будь-якого типу. Якщо поточний вказівник фай­ла зна­хо­диться за останнім елементом файла чи якщо файл не містить жод­ного еле­мен­та, то функ­ція Eof(f) повертає значення True. У протилежному ви­пад­ку вона по­вер­тає значення False.

Функція Еоln відслідковує кінець рядка у файлі.

Опис процедури: Еoln(f):boolean. Якщо у файлі вказівник знаходиться на позначці кінця рядка, то функція приймає значення True. У протилежному випадку вона повертає значення False. Якщо функція Eoln записана без аргументу, то перевіряється стандартний файл Input.

Текстові файли. Вміст текстового файла – це послідовність сим­вольних ряд­ків змінної дов­жи­ни, розділених спеціальною комбінацією симво­лів, котра нази­вається кінець рядка. Кінець рядка – це два символи: керуючий код „переведення ка­ретки” (символ з кодом 13) і керуючий код „переведення рядка” (символ з кодом 10). Текстовий файл завершується спеціальним кодом „кінець файла” (символ з ко­дом 26). У розділі оголошення змінних файлова змінна для текстових файлів ого­ло­шу­ється наступним чином: < Ідентифікатор файлової змінної > : text .

Текстовий файл можна відкрити за допомогою процедур Reset, Rewrite або Append. Процедура Reset відкриває текстовий файл тільки для читання. Процедура Rewrite створює новий тестовий файл, доступний тільки для запису. Крім цих двох, для текстових файлів застосовується ще процедура Append. Процедура Ap­pend відкриває існуючий текстовий файл, ставить вказів­ник після останнього еле­мента файла і дозволяє дописувати інформацію в кінець цьо­го файла. Опис процедури має вигляд: Append(var f : text). Параметр f – файло­ва змінна тек­сто­во­го типу, що повинна бути пов’язана з зовнішнім файлом за допомогою процедури Assign. Процедура Append відкриває існуючий зовнішній файл з ім’ям, по­в’я­заним зі змінною f. Якщо зовнішнього файла з зазначеним ім’ям не існує, то таке звертання є помилковим. Якщо файл f уже відкритий, то він спочатку закривається, а потім відкривається заново. Поточний вказівник вста­нов­лю­ється в кінець файла. Після звертання до процедури Append файл стає досту­п­ним тільки для запису.

Текстові файли є файлами послідовного доступу. Це означає, що кожний елемент цього файла може бути прочитаний тільки після прочитання попереднього. Читання з текстового файла відбувається процедурами Read і Readln. Поточний вка­зівник при роботі з текстовими файлами вказує на поточний символ. Процеду­ри Write та Writeln записують одне або декілька значень у тексто­вий файл.

При зчитуванні числових значень з текстового файла корисно викорис­то­ву­ва­ти функції SeekEoln і SeekEof. Функція SeekEoln шукає кінець поточного рядка (end-of-line) або перший значущий символ.

Опис процедури має вигляд: SeekEoln(var f: text): boolean. Переміщує по­точ­ний вказівник файла до символу кінець рядка, пропускаючи символи про­пусків та знаків табуляції. Зупиняється на символі кі­нець рядка (end-of-line), і тоді повертає значення True, або на першому значу­що­му символі (символі, що не є символом пропуску чи знаком табуляції), і тоді повер­тає значення False.

Функція SeekEof шукає кінець файла (end-of-file) або перший значущий символ. Опис процедури має вигляд: SeekEof(var f: text):boolean. Переміщує по­точ­ний вказівник файла до символу кінець файла (end-of-file), пропускаючи сим­во­ли пропусків, знаків табуляції та символи кінець рядка (end-of-line). Зупи­ня­єть­ся на символі кінець файла (end-оf-file), і тоді повертає значення True, або на пер­шому значущому символі (символі, що не є символом пропуску, символами кінця рядка чи знаком табуляції), і тоді повертає значення False. Функцію можна ви­ко­рис­товувати тільки для текстових файлів.

Типізовані файли. Вміст типізованого файла – це послідовність еле­ментів одна­кового типу, котрий для цього файла вважається базовим. У розділі ого­ло­шен­ня змінних файлова змінна для типізованих файлів оголошується наступним чи­ном: < Ідентифікатор файлової змінної > : file of <базовий тип>;

Базовий тип може бути довільним типом, крім файлового чи складового, що містить файлову компоненту. Типізований файл можна відкрити за допомогою про­цедур Reset і Rewrite. Процедури Reset і Rewrite відкривають файл для чи­тан­ня і для запису. Процедура Rewrite створює новий файл. Читання з типізованих фай­лів відбувається процедурою Read, запис – процедурою Write.

Функція FilePos. Повертає позицію поточного вказівника у файлі. Опис про­це­дури має вигляд: FilePos(f):longint. f – файлова змінна. Результатом виконання функції є номер елемента, на який вказує поточний вказівник файла.

Функція FileSize. Обчислює поточний розмір файла. Опис процедури має вигляд: FileSize(var f):longint. f – файлова змінна. Функція обчислює кількість елементів у файлі. Якщо файл порожній, функція прийме значення 0. Функція не може викорис­товуватися для текстового файла.

Процедура Seek. Переміщує поточний вказівник файла па заданий елемент.

Опис процедури має вигляд: Seek(var F; N: Longint). F – файлова змінна будь-якого типу, за винятком текстового файла, а N – номер елемента файла. По­точ­ний вказівник файла F переміщується на елемент із номером N. Номер пер­шо­го елемента файла дорівнює 0. Seek(F, FileSize(F)) переміщує поточний вказівник файла на кінець файла. Процедуру не можна використовувати до текстових файлів.

 

Нетипізовані файли. Нетипізовані файли використовуються для ор­ганізації до­сту­пу до будь-яких файлів на диску, незалежно від їх структури. Файл трак­ту­єть­ся як послідовність елементів (записів) довільного типу. Розмір елементів вка­зується при відкриванні файла процедурами Reset або Rewrite. Тобто, нетипізовані файли можна трактувати, як типізовані, для яких відомий ті­ль­ки розмір запису в байтах, але невідомий тип цього запису.

У розділі оголошення змінних файлова змінна для нетипізованих файлів оголошується наступним чином: < Ідентифікатор файлової змінної > : file.

Процедури Reset і Rewrite мають додатковий параметр, який задає дов­жи­ну елемента (запису) нетипізованого файла в байтах. Якщо цей параметр відсут­ній, то довжина запису за замовчуванням встановлюється 128 байтів. Процедури Reset і Rewrite відкривають файл і для читання і для запису. Читання з нети­пізо­­ва­них файлів відбувається процедурою BlockRead, запис – процедурою BlockWri­te. Процедури Assign, Reset, Rewrite. Close, Seek і Eof виконують ті ж функції, що і для типізованих файлів.

 

Порядок виконання роботи:

1. Занотуйте номер свого варіанту для звіту.

2. Виберіть згідно номеру свого варіанту дані для завдання
та перепишіть у звіт формулювання цього завдання.

3. Складіть та занотуйте для звіту тексти програм
на мові Pascal для виконання завдання.

4. Запустіть середовище програмування Turbo Pascal.

5. Виконайте налаштування на робочий каталог –
зробіть поточним каталог групи.

6. Створіть новий файл у середовищі програмування Turbo Pascal.

7. Введіть текст першої програми.

8. Дайте назву створеному файлу програми – PR151
та збережіть його у папці групи на робочому диску D.

9. Виконайте компіляцію програми та запустіть її на виконання.

10. Створіть новий файл у середовищі програмування Turbo Pascal.

11. Введіть текст другої програми.

12. Дайте назву створеному файлу програми – PR152
та збережіть його у папці групи на робочому диску D.

13. Виконайте компіляцію створеної програми.

14. Запустіть програму на виконання у середовищі Turbo Pascal.

15. Перегляньте та занотуйте для звіту одержані результати.

16. Вийдіть із середовища програмування Turbo Pascal.

 

Контрольні запитання:

1. Які типи даних використовують у мові програмування Pascal?

2. Яким чином можна реалізувати розгалуження у мові Pascal?

3. Які типи циклів використовують у мові програмування Pascal?

4. Що представляють собою файлові типи даних мови Pascal?

5. Що представляє собою об’єкт, який називають файлом у Pascal?

6. Яким чином можна задати дані файлового типу у мові Pascal?

7. Які типи файлів використовують у мові програмування Pascal?

8. Які основні етапи можна виділити під час роботи з файлами?

9. Що представляють собою текстові файли у мові Pascal?

10. Що представляють собою типізовані файли у мові Pascal?

11. Що представляють собою нетипізовані файли у мові Pascal?

12. Що представляє собою функція Eoln мови програмування Pascal?

13. Що представляє собою процедура Rewrite мови програмування Pascal?

14. Що представляє собою процедура Close мови програмування Pascal?

15. Що представляє собою процедура Reset мови програмування Pascal?

16. Для чого призначена процедура Append мови програмування Pascal?

17. Для чого призначена функція SeekEof мови програмування Pascal?

18. Для чого призначена функція FileSize мови програмування Pascal?

19. Для чого призначена процедура Seek мови програмування Pascal?

20. Що представляє собою процедура BlockRead мови програмування Pascal?

 

Студенти повинні знати:

1. загальну характеристику середовища програмування
Turbo Pascal та основні принципи роботи у ньому;

2. оператори та стандартні процедури і функції мови Pascal;

3. пріоритет операцій та правила запису складних виразів;

4. загальну характеристику файлових типів даних мови Pascal;

5. основні принципи побудови програм для роботи з файлами.

 

Студенти повинні вміти:

1. працювати у середовищі програмування Turbo Pascal;

2. використовувати текстовий редактор середовища
Turbo Pascal для введення та редагування текстів програм;

3. виконувати тестування та налагодження
програми у середовищі програмування Turbo Pascal;

4. складати програми для роботи з файловими типами
даних у середовищі програмування Turbo Pascal.

Порядок оформлення звіту:

Звіт повинен складатися з наступних частин:

1. Тема роботи.

2. Мета роботи.

3. Хід роботи.

4. Висновки до роботи.

Зразок виконання практичної роботи №15

Завдання

Скласти наступну програму:

сформувати файл, який містить відомості про працівників фірми (прізвище, посаду та рік прийому на роботу). Використовуючи
цей файл вивести прізвища співробітників, що пропрацювали
не менше 15 років. Кількість співробітників: 24.

Текст програми:

program filtp;

const k=24; r=2010;

type tzap=record

pr:string[25];

ps:string[15];

rp:word; end;

var z:tzap; i:integer;

f: file of tzap;

begin

assign(f, ’d:\spivrob.zap’);

rewrite(f);

for i:=1 to k do with z do

begin

write(’prizv: ’); readln(pr);

write(’posada: ’); readln(ps);

write(’rik pr na roboty: ’); readln(rp);

write(f,z); end;

close(f); reset(f);

writeln(’ ’ :15, ’prizv’);

repeat

read(f,z);

with z do if (r-rp)>=15 then writeln(pr:30);

until eof(f); writeln; end.

Завдання

 

Скласти наступні програми:

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

 

умова кількість книжок
коштують більше 95 гривень
видані до 2007 року
є в одному екземплярі
коштують менше 50 гривень
видані після 1998 року

Практична робота №16

 

Робота з динамічними змінними

у середовищі Turbo Pascal.

 

Мета: Навчитися створювати програми для роботи з динамічними змінними на мові Pascal та користува­ти­ся основними елементами інтерфейсу середо­ви­ща програмування для редагу­ван­ня і виконання програм у Turbo Pascal.

 

Прилади, обладнання та інструменти:

Для виконання практичної роботи використовується ПК з наступним програмним за­безпеченням: операційна система Windows XP; середовище Turbo Pascal.

 

Теоретичні відомості:

Змінні, оголошені в розділах описів основної програми і підпрограм, нази­ва­ють статичними. Для глобальних змінних, тобто змінних, оголошених в розділах опи­­­су змінних основної програми, пам’ять відводиться на початку виконання про­г­ра­­ми і зберігається за ними до завершення виконання програми. Глобальні змін­­­ні зберігаються в спеціальній області пам’яті, яка називається сегментом да­них. Сегмент даних має максимальний розмір 64 К. Для локальних змінних па­м’ять виділяється в момент виклику підпрограми, а по завершенні її виконання ця пам’ять звільняється. Іноді під час виконання програми доводиться працювати з невідомим наперед обсягом даних. Pascal дозволяє створювати нові змінні і знищувати їх безпосередньо під час виконання програми. Змінні, створенням і знищенням яких можна явно керувати під час виконання програми, називаються динамічними змінними. Створення таких змінних відбувається шляхом відведення для них пам'яті в спеціальній області пам’яті, яка називається областю динамічнорозподілюваної пам’яті.Область динамічно розподілюваної пам'яті – це вся пам’ять, яку операційна система робить доступною для програми і яка не використовується її кодом, сегментом даних і стеком.

Доступ до статичних змінних відбувається за допомогою їх іденти­фі­ка­то­рів. Дина­мічні змінні, кількість і місце розташування яких наперед невідомі, не­можливо позначити ідентифікаторами. Єдиним способом доступу до динамічних змінних є адреса, яка вказує на їх місце знаходження в пам'яті. Такі адреси містять змінні, що мають тип вказівник. Вказівник – це змінна, значенням якої є адреса пам'яті, де розташований сам динамічний об'єкт. Сам вказівник займає 4 байти. Вказівники доцільно використо­вувати в наступних випадках:

• якщо програма працює з великими обсягами даних,
загальний обсяг яких перевищує 64К;

• якщо програма під час виконання опрацьовує сукупність
даних, загальний обсяг яких наперед невідомий;

• якщо програма використовує тимчасові буфери для зберігання даних;

• якщо програма повинна трактувати ті самі дані, як дані різних типів;

• якщо програма використовує зв'язані списки даних.

Опис типу вказівник. Опис типу вказівник складається символу ^, після якого стоїть іден­ти­фікатор базового типу або зарезервоване слово pointer:

^ <базовий тип> або ^ pointer, де <базовий тип> – це ідентифікатор типу. Якщо базовий тип є ще не описаним ідентифікатором, то він повинен бути опи­са­ний в тому самому розділі опису типів, що і тип вказівник.

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

Розіменування вказівників. Змінні типу вказівник можуть містити адреси да­них певного типу або значення, яке позначається словом nil. Зарезервоване слово nil означає константу зі значенням вказівника, який ні на що не вказує (порожній вказівник). Одержання доступу до даних, на які вказують змінні вказівного типу, називають розіменуванням вказівників. Щоб розіменувати вказівник, потрібно роз­та­шувати символ " ^ " після змінної вказівного типу. З розiменованим вказівником можна працювати так само, як і зі змінною того типу, на який він вказує. Змінні ти­пу pointer а також вказівники, що вказують на певний тип даних, але прий­мають зна­чення nil, не можуть бути розіменовані: символ " ^ " після такої змінної при­зво­дить до помилки.

Присвоєння вказівникам адреси статичних змінних. Змінним вказівного типу може присво­юватися адреса оголошених в програмі змінних, які розташо­ва­­ні в сегменті даних. Найчастіше так чинять тоді, коли одні і ті самі дані в про­гра­мі потрібно інтерпре­ту­ва­ти, як дані різного типу. У програмі оголо­шу­ють змін­ну певного типу, у якій збері­га­тиму­ться ці дані і вказівник на змінну ін­шо­го типу. Адресу змінної присвоюють вказівнику, що забезпечує подвійний дос­туп до одних і тих самих даних і дозволяє різну їх інтерпретацію. Адреса присво­ю­ється змінній-вказівнику операцією @:

< Ідентифікатор вказівника > : = @< Ідентифікатор змінної > .

Операція @ присвоює змінній-вказівнику адресу області пам'яті, що містить статичну змінну.

Створення та знищення динамічних змінних. Динамічні змінні i значення вказівників створюються за допомогою стандартних процедур New і GetMem.

Процедура New має тільки один параметр – змінну, що має тип вка­зів­­ник. Процедура New в області динамічно розподілюваної пам'яті відводить но­ву область пам'яті для динамічних змінних і зберігає адресу цієї області в змін­ній-вка­зівнику. Синтаксис процедури: New(var Р: <змінна-вказівник>).

Змінна-вказівник може бути вказівником будь-якого типу. Розмір виді­ле­но­го блоку пам'яті відповідає розміру того типу, на який вказує змінна-вказів­ник. Якщо для виділення пам'яті під нову динамічну змінну недостатньо вільної пам'яті, то під час виконання програми відбувається помилка.

Крім процедури New існує ще й функція New. Опис функції має вигляд:

New(<тип вказівника>):<значення адреси>.

Особливістю цієї функції є те, що її аргументом є не константа чи змі­н­­на певного типу, а влас­не тип динамічної змінної, яку вона повинна ство­­ри­ти. Результатом виконання функції є вказівник конкретного типу.

Динамічні змінні, створені процедурою чи функцією New, знищу­ю­ть­ся процедурою Dispose. Опис процедури: Dispose(var P: pointer).

Параметр Р є змінною-вказівником і може мати тип, що відповідає будь-яко­му типу вказівника. Змінна Р повинна бути попередньо створена за допо­мо­гою процедури New, або їй було присвоєне значення такої змінної за до­по­мо­гою оператора присвоювання. Процедура знищує змінну, на яку вказує Р і повер­тає зайняту нею пам'ять в область динамічно розподілюваної пам'яті. Зна­чен­ня Р стає нeвизначеним.

Іншу можливість створювати динамічні змінні надає процедура GetMem. Процедура GetMem створює нову динамічну змінну вказаного роз­мі­ру і розташовує адресу блоку в змінній-вказівнику.

Опис процедури: GetMem(var P: pointer; Size: word). Параметр Р є змін­ною-вка­зівником і може відноситися до будь-якого типу вка­зівників. Пара­метр Size має тип word і задає розмір у байтах області па­м’я­ті, яку слід ви­ді­ли­ти для динамічної змінної. Найбільший блок, що може бути ви­ділений в області ди­намічно розподілюваної пам'яті складає 65521 байт (64К). Динамічні змінні, ство­рені процедурою чи функцією GetMem, знищуються про­це­дурою FreeMem. Про­цедура FreeMem знищує динамічну змінну вказаного розміру. Опис про­це­дури: Freemem(var Р: pointer; Size: word). Параметр Р є вказів­ни­ком на змінну, для якого було попередньо виконане присвоювання за допомогою про­цедури GetMem, чи якому було присвоєно значення за допомогою оператора присвоювання.

Процедура Mark присвоює динамічній змінній, на яку посилається вказівник (по­кажчик), поточну адресу початку вільної ділянки динамічної пам’яті. Синтаксис про­цедури: Mark (P, Size); де P – нетипований вказівник, Size – розмір динамічної змінної в байтах. Функція MaxAvail повертає розмір найбільшої вільної ділянки в динамічній обла­сті пам’яті. Функція MaxAvail не має параметрів. Результат функції належить до типу LongInt. Функція MemAvail повертає кількість всієї вільної пам’я­ті в області пам’яті, що динамічно розподіляється. Результат функції належить до типу LongInt. Процедура Release звільнює частину динамічної пам’яті. Синтаксис про­це­ду­ри: Release (P); де P – вказівник будь-якого типу, раніше визначений Mark.

Стандартні функції для роботи з адресами:

- функція Addr використовується для отримання адреси змінної або під­про­­грами і може застосовуватися замість операції визначення адреси @;

- функція Cseg повертає значення типу word, що зберігається в регістрі CS процесора (базис сегмента коду програми);

- функція Dseg повертає значення типу word, що зберігається в регістрі DS процесора (базис сегмента даних програми);

- функція Ofs повертає значення типу word, що дорівнює зміщенню адре­си змінної, яка зберігається в сегменті даних, або зміщенню адреси під­про­грами, що записана у сегменті коду;

- функція Ptr перетворює пару цілих чисел – значення базису сегмента та значення зсунення – на адресу, тобто на значення типу pointer.

Найчастіше динамічні змінні використовуються у списках.

Списки. Списки використовують для опрацювання і тимчасового зберігання даних у випадках, коли застосування традиційних структур даних, наприклад маси­вів, недоцільне або неможливе. Список – це ланцюжок пов’язаних один з одним елементів списку, розташованих в області динамічно розподілюваної пам’яті. Еле­мент списку має тип запис (базовий тип). Одне з полів елемента списку обов’яз­ко­во євказівником на базовий тип. Адреса першого елемента списку обов’язково збе­рігається у змінній, що є вказівником на базовий тип. У полях цього запису збе­рігається необхідна інформація, а в полі, що є вказівником на базовий тип, збе­рі­га­ється адреса наступного запису або значення nil, якщо цей елемент списку є останнім. Такий список називають однонаправленим. У записі базового типу мож­на запровадити ще одне поле, що є вказівником на базовий тип, і записувати в ньо­му адресу попереднього елемента списку або значення nil, якщо цей елемент спис­ку є першим. Такий список називають двонаправленим.

Списки мають ряд переваг перед масивами. Списки можна створювати в той момент виконання програми, коли це необхідно, і знищувати, коли в них немає по­тре­би. Кількість елементів списку не потрібно оголошувати наперед. У будь-який момент можна створити нові або знищити кілька існуючих елементів списку. У списки легко вставляти нові елементи і переставляти місцями існуючі. Для цього достатньо поміняти декілька адрес.

Динамічні структури даних.

Розміри динамічних структур даних визнача­ю­ть­ся і можуть змінюватися під час виконання програми. Основними різновидами динамічних структур є лінійні списки, дерева (нелінійні списки) і динамічні ма­си­ви.

Зв’язний лінійний список – це сукупність однотипних компонентів, які по­слі­довно зв’язані між собою за допомогою вказівників. Кожен компонент списку, крім останнього, містить вказівник на наступний (або на наступний і попередній) ком­понент. Перший компонент списку називається його вершиною, або головою. Над зв’язними лінійними списками можна виконувати такі дії: створення списків, додавання нового компонента; видалення компонента та перегляд списків. Зв’язні лі­ні­йні списки поділяються на такі різновиди: однозв’язний (однонаправлений) лі­ній­ний список, двозв’язний (двонаправлений) лінійний список; однозв’язний цик­ліч­ний список, двозв’язний циклічний список, стек, черга.

Однозв’язний лінійний список – це список, в якому попередній компонент по­­си­лається на наступний. Двозв’язний лінійний список – це список, в якому по­пе­­­редній компонент посилається на наступний, а наступний – на попередній. Одно­­зв’яз­ний циклічний список – це однозв’язний лінійний список, в якому остан­ній компонент посилається на перший. Двозв’язний циклічний список – це дво­зв’яз­ний лінійний список, в якому останній компонент посилається на перший, а пер­ший компонент – на останній.

Стек – це однозв’язний лінійний список, в якому компоненти додаються та видаляються лише з його вершини, тобто з початку списку. Стек реалізує принцип обслуговування LIFO: останнім прийшов – першим пішов.

Черга – це однозв’язний лінійний список, в якому компоненти додаються в кі­нець списку, а видаляються з вершини, тобто з початку списку. Черга реалізує прин­­цип обслуговування FIFO: першим прийшов – першим пішов.

 

Порядок виконання роботи:

1. Занотуйте номер свого варіанту для звіту.

2. Виберіть згідно номеру свого варіанту дані для завдання
та перепишіть у звіт формулювання цього завдання.

3. Складіть та занотуйте для звіту текст програми
на мові Pascal для виконання завдання.

4. Запустіть середовище програмування Turbo Pascal.

5. Виконайте налаштування на робочий каталог –
зробіть поточним каталог групи.

6. Створіть новий файл у середовищі програмування Turbo Pascal.

7. Введіть текст створеної програми.

8. Дайте назву створеному файлу програми – PR16
та збережіть його у папці групи на робочому диску D.


<== попередня лекція | наступна лекція ==>
ЭКОНОМИЧЕСКОЕ МОДЕЛИРОВАНИЕ 5 страница | ЭКОНОМИЧЕСКОЕ МОДЕЛИРОВАНИЕ 7 страница


Онлайн система числення Калькулятор онлайн звичайний Науковий калькулятор онлайн