Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Записи (RECORD). Робота з ними




 

Компоненти файла можуть бути будь-якого типу, як простого, так і складеного, але найбільш часто в файлі зберігаються записи (дані типу RECORD).

Запис – це складений тип даних, який дозволяє зберігати разом змінні різного типу. Для кращого розуміння запису наведемо його порівняння з масивом:

Характеристика масиву:

1. Компонентами масиву є елементи.

2. Елементи масиву можуть бути одного типу.

3. Всі елементи мають однакове ім’я, яке збігається з ім’ям самого масиву.

 

Характеристика запису:

1. Компонентами запису є поля.

2. Поля можуть бути різного типу.

3. Кожне поле має своє ім’я, що відрізняється від імен інших полів.

Опис змінних типу RECORD:

TYPE<ім’я запису>=RECORD

< ім’я першого поля >:<тип даних 1-го поля>;

-

-

-

<ім’я n-го поля>:<тип даних n-го поля>;

END;

VAR<ім’я змінної>:<ім’я запису>;

Таким чином, тип даних RECORD дає програмісту можливість об’єднувати в одну структуру різні за типом і змістом дані.

Доступ до полів запису здійснюється за їх іменами, які добавляються до імені запису через точку:

<ім’я запису>.<ім’я k-го поля>

При роботі із записами часто використовують оператор під’єднання WITH..DO, який робить доступ до окремих полів запису більш компактним:

WITH<список змінних>DO<оператор>.

Він працює таким чином: при виконанні <оператору> змінні із <списку змінних> при необхідності автоматично дописуються через точку перед іменами полів, які зустрічаються в цьому <операторі>.

 

3.6.3. Рядковий тип даних (STRING). Стандартні процедури

та функції для обробки рядків

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

Опис змінних типу STRING:

VAR<ім’я рядка>: STRING[<максимальний розмір рядка>];

Існують два основних способи обробки змінних типу STRING:

А) Обробка рядка як одного цілого.

Наприклад: SUMVOL:=’це рядок’;{операція присвоювання значення відразу всьому рядкові}.

Б) поелементна обробка рядка.

Елементами рядка є окремі символи, тобто змінні типу SCHAR.SUMVOL[5]:=’a’; присвоєння п’ятому елементу рядка значення ’a’.

Для роботи з рядковими типами даних існують такі стандартні процедури та функції:

-LENGTH(<ім’я рядка>)- функція, яка дозволяє визначити фактичну довжину текстового рядка;

-COPY(<ім’я рядка>,<початкова позиція>,<число символів>) — функція, яка дозволяє копіювати фрагмент рядка з однієї змінної в іншу (вказується початкова позиція та число символів копіювання);

-POS(<ім’я рядка з шуканим фрагментом>,<імя рядка, де шукають фрагмент>) ­— функція, яка виконує пошук у вказаному рядку певного (заданого) фрагменту. Якщо цей фрагмент відшукується, то функція повертає номер позиції в рядку, з якої шуканий фрагмент починається. Інакше повертає нуль;

-INSERT(<ім’я рядка, що вставляється>,<ім’я рядка, куди вставляти >,<номер позиції>) — процедура, яка в деякий рядок уставляє інший рядок, починаючи із заданої позиції;

-DELETE(<ім’я рядка>,<поч. позиція>,<кількість символів>) — процедура, яка видаляє в указаному рядку фрагмент певної довжини, починаючи з указаної позиції.

 

Зразок виконання індивідуального завдання

 

Завдання 1. Увести у файл інформацію про студентів групи (прізвище, домашню адресу, телефон, вік, екзаменаційні оцінки). Вивести інформацію про встигаючих студентів та студентів-відмінників(їх прізвища). Число студентів групи - №.

1) Виконання завдання 1. Складемо алгоритм розв’язання поставленої задачі у вигляді графічної блок-схеми (рис.3.6.2).

Напишемо програму мовою ТР7.0, яка реалізує наведений алгоритм.

Оскільки інформація про студента є сукупністю різних за типом і змістом даних, то для її зберігання зручно використати запис (тип даних RECORD). Тоді програма матиме вигляд:

 

PROGRAM INFORM GRUP;

USES Crt;

TYPE STUDENT=RECORD {тип даних запис}

PRIZVUSHE:=STRING [25]; {рядковий тип}

ADRESA: STRING [50];

TELEFON: STRANG [10];

VIK: 15..25; {обмежений тип даних}

ECZAMEN: RECORD FIZIKA,MATHEM,PROGR:2..5;

END; {укладений запис}

END;

VAR INFORM STUD: STUDENT;

GRUP: FILE OF STUDENT; {опис файлової змінної}

FILE NAME: STRING [20]; i: INTEGER;

CONCT N=25: {кількість студентів у групі}

BEGIN

CrlScr;

WRITE(‘Уведіть ім’я файла на дискові:’);

READLN (FILE NAME);

ASSIGN (GRUP, FILE NAME); { зв’язування }

REWRITE9GRUP); {створення і відкриття файла}

FOR i:=1 TO N DO {введення інформації про студентів}

BEGIN

WITH INFORM STUD, ECZAMEN DO

BEGIN

WRITE (‘Прізвище, ім’я та по батькові студента:’);

READLN (PRIZVUSHE);

 

WRITE (‘адреса:’);

READLN (ADRECA);

WRITE (‘телефон’);

READLN (TELEFON);

WRITE (‘вік’);

READLN (VIK);

WRITE (‘екзаменаційні оцінки:’);

READLN (FIZIKA, MATHEM, PROGR);

END;

WRITE (GRUP, INFORM STUD); {запис у файл}

END;

CLOSE (GRUP); {закриття файла}

RESET (GRUP); {повторне відкриття файла}

{указівник файла переміщується на початок}

WHILE NOT EОF (GRUP) DO {кінець файла}

BEGIN

READ (GRUP, INFORM STUD); {зчитування інформації}

 

WITH INFORM STUD, ECZAMEN DO

BEGIN

IF (FIZIKA>2) AND (MATHEM>2) AND (PROGR>2)

THEN

WRITELN (‘устигаючий’, PRIZVISHE);

IF FIZIKA+MATHEM+PROGR=15

THEN

WRITELN (‘відмінник’, PRIZVUSHE);

END;

END;

CLOSE (GRUP);

END.


 

 

так

 

ні

 

 

так

 

ні

 

так

 

ні

 

так

 

 

Рис.3.6.2.Блок-схема введення інформації про студента групи в файл та її обробки


Особливістю наведеної програми є те, що одне поле запису STUDENT в свою чергу також є змінною типу RECORD (поле ECZAMEN). Оскільки поля цього вкладеного запису (назви екзаменаційних дисциплін) мають однаковий тип (обмежений тип 2..5), то їх можна об’єднати, записавши через кому.

Зверніть також увагу на використання в даній програмі оператора під’єднання WITH..DO, який робить її більш компактною.

Після закінчення введення інформації про студентів групи виконується закриття файла (процедура GLOSE), а потім повторне його відкриття (процедура RESET). Цей прийом застосовується для переведення вказівника файла на його початок, щоб потім виконувати зчитування інформації саме з початку файла до його кінця. Хоча для переміщення вказівника можна використовувати й інші засоби (наприклад, процедуру SEEK).

Зчитування інформації з файла організовано за допомогою циклу WHILE..DO. Він використовується до тих пір, поки не буде досягнуто кінця файла (коли умова NOT EОF () стане хибною).

Завдання 2. Виконувати введення слів у файл до тих пір, поки не буде введено слово, що містить N букв (символів). Вивести число введених слів та слова, що містять непарну кількість символів.

Виконання завдання. Складемо алгоритм розв’язку поставленої задачі у вигляді графічної блок-схеми (рис.3.6.3).

Напишемо програму мовою ТР7.0, яка реалізує наведений алгоритм.

 

PROGRAM FILE SLOVO;

USES Crt;

VAR SLOVO:STRING; I,N: INTEGER;

WESTERN: FILE OF STRING; FILE NAME: STRING[20];

BESIN ClrScr;

WRITE (‘Введіть потрібну довжину слова:’);

READLN(N);

WRITE(‘Введіть ім’я файлу на дискові:’);

READLN(FILE NAME);

ASSIGN(WESTERN,FILE NAME);

REWRITE(WESTERN);

I:=0;

REPEAT

I:=I+1;

WRITE(:);

READLN(SLOVO);

WRITE(WESTERN,SLOVO);

UNTIL Length(SLOVO)=N; {довжина введеного слова }

WRITELN(’Кількість введених слів:’,i);

CLOSE(WESTERN);

RESET(WESTERN);

WHILE NOT EОF(WESTERN)DO


 

 

ні

 

так

 

ні

ні

 

 

т

так

 

Рис.3.6.3.Блок-схема введення слів у файл та їх обробки

BEGIN

READ(WESTERN,SLOVO);

IF LENGTH(SLOVO)MOD 2<>0 THEN

WRITELN(SLOVO);

END;

READLN;

CLOSE(WESTERN);

END.

 

Зверніть увагу на те, як визначаються слова, що містять непарну кількість символів. Це робиться за допомогою операції МОD, яка виробляє остачу від ділення на два; якщо остача не дорівнює нулю, то ділене число непарне.

2)Введемо, налагодимо і виконаємо програми за комп’ютером.

 

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

 

1.Які складені типи даних мови ТР7.0 Ви знаєте? Коротко охарактеризуйте кожен із цих типів.

2.Які Ви знаєте стандартні процедури і функції для роботи з файлами?

3.Які Ви знаєте стандартні процедури і функції для роботи з рядковим типом даних?

4.Яка послідовність роботи із змінними файлового типу?

5.Модифікуйте програму FILE SLOVO так, щоб слова з непарною кількістю символів виводилися не на екран монітора, а записувалися в інший файл. Перегляньте результати її роботи.

 




Поделиться с друзьями:


Дата добавления: 2014-10-31; Просмотров: 417; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.038 сек.