Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
lab_rab_pascal_delphi.doc
Скачиваний:
0
Добавлен:
20.02.2020
Размер:
6.06 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.

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

Лабораторна робота №8. Тема: Робота з текстовими файлами. Використання типізованих файлів.

Мета роботи: навчитись працювати з текстовими і типізованими файлами, створювати файл записів.

Хід роботи

  1. Запустіть програму TURBO PASCAL.

  2. Напишіть програму пошуку в текстовому файлі заданих символів.

    1. Створіть текстовий файл з ім'ям Lab12_1.txt в каталозі D:\KMxxxx\ за допомогою програми, записаної на лекції. Текст повинен містити 20 рядків, які мають слова, що повторюються.

    2. Створіть програму пошуку слів, що повторюються, у файлі.

const sum: word=0; {лічильник: скільки разів знайшли}

var f1,f2: text;

str,search: string[80];

begin

write('Введіть рядок пошуку: '); readln (search);

{ зв'язуємо fl і f2 з іменами файлів }

assign(f1, 'Lab12_1.txt'); assign(f2,'analys.txt');

{ відкриваємо f1 і створюємо f2 }

reset(f1); rewrite(f2);

writeln('Протокол пошуку:');

writeln(f2,'Протокол пошуку:');

while not eof(f1) do {доки не закінчиться файл fl, виконуємо цикл }

begin

readln(f1,str); { вводимо рядок str з файлу fl }

if роs(search,str)>0 then

begin { шукаємо search в str }

inc(sum);

writeln('Знайдено (раз):',sum);

writeln(str); {виведення на екран}

writeln(f2,str); { виведення у файл }

end;

end;

close(f1); close(f2); { закриваємо файли }

end.

  1. Використовуючи початкові текстові файли, виконайте дії, вказані в завданні

Задача

Проаналізувавши вхідний текстовий файл, створіть аналогічний йому файл, виключивши з нього всі символи цифр.

Поміняйте вміст рядків вхідного текстового файлу справа-наліво.

Зчитуючи вхідний текстовий файл, позбудьтеся від кожних 4-х символів в рядку.

Маючи 2 різні текстові файли, створіть третій, вмістом якого будуть рядки вхідних текстових файлів, що чергуються.

У вхідному текстовому файлі позбудьтеся всіх символів, що не входять в буквений і цифровий набори.

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

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

Маючи початковий текстовий файл, створіть два аналогічні файли, і винесіть всі голосні букви в перший файл (довжина рядка 60), приголосні букви – в другий файл (довжина рядка 50).

В початковому текстовому файлі замініть всі символи відповідними ASCII-кодами.

У вхідному текстовому файлі позбудьтеся всіх розділових знаків.

  1. Складіть програму, яка формує файл із записів, структура яких описана в лабораторній роботі 7, пункт 2. Розіберіть принцип роботи програми. Виконайте програму.

program lr12_2;

uses crt;

type student = record {опис типу запису}

fam: string[20];

name: string[10];

otch: string[20];

grup:string[20];

birthday: record

year: 1975..1989;

month: 1..12;

day: 1..31;

end;

end;

f_student=file student;

var f1: f_student;

f2: text;

texnikum: student;

n:byte;

grup1: string[20];

fam1:string[20];

{процедура введення даних - використовуємо складові імена}

procedure input_data;

var otv:string[3];

begin

repeat

write('прізвище '); readln(texnikum.fam);

write('ім’я '); readln(texnikum.name);

write('побатькові '); readln(texnikum.otch);

write('група '); readln(texnikum.grup);

write('рік народження '); readln(texnikum.birthday.year);

write('місяць '); readln(texnikum.birthday.month);

write('день '); readln(texnikum.birthday.day);

write(f1,texnikum);

write('вводити ще дані про студента ТАК або HІ?->');

readln (otv);

until otv = 'nі';

end;

{процедура виводу даних -використовуємо оператор with}

procedure write_data;

begin

with texnikum do begin

writeln('Прізвище студента ',fam);

writeln(' Ім’я ',name);

writeln('Побатькові ',otch);

writeln('Група ',grup);

with birthday do begin

writeln('Рік народження : ',year);

writeln('місяць : ',month);

writeln('день : ',day);

end;

end;

end;

{пошук в базі даних по прізвищу, по групі}

procedure find(strl:string;kluch:char);

begin

reset(f1);

while not eof(f1) do begin

read(f1,texnikum);

with texnikum do begin

case kluch

'1': if fam = strl then write_data;

'2': if grup = strl then

begin write_data;

writeln(f2,fam:20,name:10,otch:20,grup:20,birthday.year,' ',birthday.month,' ',birthday.day)

end;

end;

end;

end;

close(f1); close(f2);

end;

{основна програма}

var ckey: char;

begin

assign(f1,'c:\tp7\texnik.dat');

assign(f2, 'c:\tp7\ t_grup.txt');

rewrite(f1); input_data; close(f1); writeln;

repeat {Створення меню}

clrscr;

writeln('1.Виведення даних про студента по прізвищу');

writeln('2. Виведення даних за назвою групи ');

writeln('3. Вихід з програми);

ckey:=ReadKey;

case ckey

'1': begin

write('введіть прізвище студента -->'); readln(fam1);

find(fam1,'1');

end;

'2': begin

write('введіть групу -->'); readln(grup1);

rewrite(f2);

find(grup1,'2');

end;

'3': exit;

end;

writeln('Натисніть будь-яку клавішу'); readkey;

until ckey=char(27); {27-код клавіші ESC}

close(f2);

end.

  1. Складіть програму формування файлів із записів згідно свого варіанту з лабораторної роботи №7.

  2. Оформіть звіт про лабораторну роботу, в якому запишіть: тема і мета роботи; тексти задач і програми, створені на лабораторній роботі.

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