Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
samost_pascal_delphi_2012.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
4.33 Mб
Скачать

Оператор with

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

With ЗміннаТипЗапис Do Оператор; {зазвичай складовий оператор}

Візьмемо наступний опис:

type

TDate = record

Day : Integer:

Month : Integer;

Year : Integer:

end;

var OrderDate: TDate;

З урахуванням даного опису наведемо приклад оператора with:

with OrderDate do

if Month = 12 then

begin

Month := 1;

Year := Year + 1

end else

Month := Month + 1;

Це еквівалентно наступному:

if OrderDate.Month = 12 then

begin

OrderDate.Month := 1;

OrderDate.Year := TDate.Year + 1

end

else

Date.month := TDate.Month + 1;

В операторі with спочатку проводиться перевірка кожного посилання на змінну, а саме: чи можна її інтерпретувати, як поле запису. Якщо це так, то вона завжди інтерпретується саме таким чином, навіть якщо є доступ до змінної з тим же ім'ям.

Допустимий описані наступні змінні:

type

TPoint = record

x,y: Integer;

end;

var

x: Point;

у: Integer;

В цьому випадку і до x, і до у можна звертатися, як до змінної або як до поля запису. В операторі:

with x do

begin

x := 10;

у := 25;

end;

x між ключовими словами with і відноситься до змінної типу покажчик, а в складеному операторі x і у посилаються на x.x і y.y.

Оператор:

with V1,V2...Vn do s;

еквівалентний операторам:

with V1 do

with V2 do

...

with Vn do

S;

В обох випадках, якщо Vn є полем і v1, і v2, то вона інтерпретується як v2.Vn, а не як v1.Vn.

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

Питання для самоконтролю.

  1. Визначення і правила запису

  2. Команда приєднання (with).

Завдання 18:

Організуйте запис, що містить відомості про книгу. Виконайте сортування назв книг за абеткою.

Організуйте масив записів, що містить інформацію про висоту гірських вершин, вказавши її в метрах. Знайдіть найвищу вершину.

Організуйте масив записів, що містить наступні анкетні дані: прізвище, ім'я, по батькові учня, місце навчання (школа, клас), оцінки по трьох предметах. Необхідно передбачити обчислення середнього бала учня.

Література: 2.с.259..263.

Файли і робота з ними. Основні розділи теми.

  1. Файлові змінні.

  2. Типи файлових змінних.

  3. Логічні файли.

  4. Функціі, застосовані для будь-яких типів файлів.

  5. Текстові файли.

  6. Функції введення – виведення INPUT, OUTPUT.

  7. Процедури і функції, що застосовуються тільки до текстових файлів.

  8. Типізовані файли.

  9. Процедури і функції для типізованих файлів.

Для роботи з файлами в програмі необхідно визначити файлову змінну. TURBO PASCAL підтримує три файлові типи: текстові файли; файли, що типізуються; файли, що не типізуються,.

Опис файлових змінних текстового типу проводиться за допомогою службового слова Text, наприклад:

var tStory: Text;

Опис типізованих файлів має вигляд:

var fComp: File T;

де T - тип компоненти файлу. Приклади опису файлової змінної, що типізується:

type M= array[1..500] Longint;

var f1: File Real;

f2: File Integer;

fLi: File M;

Файли, що не типізуються, описуються за допомогою службового слова File:

var f: File;

Файлові змінні, які описані в програмі, називають логічними файлами. Всі основні процедури і функції, що забезпечують введення - виведення даних, працюють тільки з логічними файлами. Фізичний файл повинен бути пов'язаний з логічним до виконання процедур відкриття файлів.

TURBO PASCAL вводить ряд процедур і функцій, застосованих для будь-яких типів файлів: Assign, Reset, Rewrite, Close, Rename, Erase, Eof, IOResult.

Процедура Assign( var f; FileName: String ) зв'язує логічний файл f з фізичним файлом, повне ім'я якого задано в рядку FileName.

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

Процедура Rewrite( var f ) відкриває логічний файл f для подальшого запису даних (відкриває вихідний файл). Після успішного виконання цієї процедури файл готовий до запису в нього першого елемента.

Процедура Close( var f ) закриває відкритий до цього логічний файл. Виклик процедури Close необхідний при завершенні роботи з файлом. Якщо із якоїсь причини процедура Close не буде виконана, файл все-ж буде створений на зовнішньому пристрої, але вміст останнього буфера в нього не буде перенесений. Для вхідних файлів використовування оператора закриття файлу необов'язково.

Логічна функція EOF( var f ): Boolean повертає значення TRUE, коли при зчитуванні досягнутий кінець файлу. Це означає, що вже прочитаний останній елемент у файлі або файл після відкриття виявився порожній.

Процедура Rename( var f; NewName: String ) дозволяє перейменувати фізичний файл на диску, пов'язаний з логічним файлом f. Перейменування можливо після закриття файлу.

Процедура Erase( var f ) знищує фізичний файл на диску, який був пов'язаний з файловою змінною f. Файл до моменту виклику процедури Erase повинен бути закритий.

Функція IOResult: Integer повертає ціле число, відповідне коду останньої помилки введення - виведення. При нормальному завершенні операції функція поверне значення 0. Значення функції IOResult необхідно привласнювати якій - небудь змінній, оскільки при кожному виклику функція обнуляє своє значення. Функція IOResult працює тільки при вимкненому режимі перевірок помилок введення - виведення або з ключем компіляції {$I-}.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]