русс | укр

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

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


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


ЗАПИС ФАЙЛУ.


Дата додавання: 2013-12-23; переглядів: 1482.


.

.

.

Begin

With ім’я_запису do

Оператор приєднання.

. .

.

Туре і м 'я_типу = RECORD

.

.

.

Ім'яN: тип;

End;

В даному випадку службове слово RECORD виконує роль відкриваючих операторних дужок, a END - закриваючих. В середині операторних дужок записуються елементи запису. Допускається замість імені запису вказувати список імен, тобто імена записів, відокремлених комами. Імена записів разом з їх описом називаються полями запису.

Для представленої відомості об'явлення записів буде виглядати наступним чином:

Var В:RECORD

N: integer;

FIO: array[1..20] of char;

OK: array[1..3] of integer;

END;

Більш універсальна форма об'явлення запису - це використання розділу типів Туре:

Ім'я1:тип; Ім'я2:тип;

Ім’яN: тип;

End;

Var ім'я_запису:ім'я_типу;

Елемент запису використовується в програмі в тому самому змісті, що й окрема змінна. Таким чином, елемент запису можна вказувати як у лівій частині оператора присвоєння, так і в виразах. Над елементами запису можна виконувати дії, допустимі для даних його типу. (Якщо тип елементу запису цілий, то виконуються всі операції, допустимі для цілих даних і т.д.).

Для відомості, що розглядається, можна виконати наступні операції:

1.порядковому номеру N запису В присвоїти значення 2:

B.N:=2;

2. знайти суму трьох оцінок:

s: =В.ОК[1]+В.ОК[2]+В.ОК[3];

3. ввести значення порядкового номеру:

read(B.N)

Звернення до запису в цілому, а не тільки до її елементів допускається тільки в операторі присвоєння. Зліва і справа від знаку присвоєння повинні використовуватися імена записів однакового типу.

Звернення до елементів запису відбувається за допомогою уточненого імені. Оператор приєднання дозволяє спростити звернення до елементу запису. Ім’я запису виноситься в заголовок оператора приєднання, а у блоці використовуються тільки імена елементів запису. Загальна форма оператора приєднання наступна:

End;

Між Begin та End знаходяться оператори, які містять імена елементів запису.

Для запису, що розглядається, операцію присвоєння, сумування та введення можна об’єднати в один оператор:

With B do

Begin

N:=2;

S:=OK[1]+OK[2]+OK[3];

Read(N); end;

Відмінність запису від масиву заключається в тому, що доступ до елементів запису здійснюється не по індексу, а по імені поля.

Приклад: Описати комбінований тип для представлення:

а) часу в годинах, хвилинах та секундах:

type clock=record

chas: 1..24;

min, sec: 1..60;

end;

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

Type v=record

FЮ: array[1..25] of char;

Data = record

Chislo:1..31;

Month: (янв., дек);

God:1900..2000;

End;

РоІ: (м,ж);

National: char;

End;

 

Приклад: Дано type str=array[1..10] of char;

Adr=record

Gorod,street:str;

Dom, kv:1..999;

End;

Var adrl, adr2: adr;

Використовуючи оператор приєднання, присвоїти змінній adrl значення,

що відповідає вашій адресі. Змінній adr2 присвоїти таке саме значення, замінивши в ньому номер будинку на 15.

With adrl do

Begin

Gorod: = 'Кіровоград';

Street: = 'Попова';

Dom: =13;

Kv: =156;

End;

Adr2: =adrl;

Adr2.kv: =15;

Приклад: є многочлен 4a+ 7b+8a-3a-2k+p-5r+ 7b-4k. Знайти подібні члени для змінної а та обчислити сумарний коефіцієнт. Кожний елемент многочлена можна вважати записом.

program zap 1;

type p=record

buk: char;

koef: integer;

end;

var ml,m2:p;

sum, i: integer;

begin

sum:=0;

writeln('введіть многочлен');

while not eoln do

begin

readln(m1.koef);

readln(m1.buk);

if m1.buk= 'a' then

sum:=sum+m1.koef;

end;

m2.koef:=sum;

m2.buk:=’a’;

writeln(‘сумарний коефіцієнт=',т2.koef,m2.buk);

end.

m1 - вхідний елемент многочлена;

m2 - вихідний елемент многочлена;

Buk - буква (елем. зап.);

Sum - сума;

Koef - коеф. (елем. зап.)

В даній програмі використовується два записи: ml та m2 з однаковою структурою, тобто з однаковими типами даних.

Задача: Група складається з п студентів. Ввести їх дані в комп’ютер та відсортувати за алфавітом (прізвища).

Program ZAP5;

Const n=15;

Type stud=record

FIO: string [20];

OK: array [1..5] of integer;

end;

Var Grupa: array [1..n] of stud;

st: stud;

i, k, j: integer;

Begin

Writeln(‘Введ. записи’);

For i:=1 to N do

begin

with Grupa [i] do begin

Readln (FIO);

For k:=1 to 5 do read (OK [k]);

readln; end; end;

{сортування за алфавітом};

For i:=1 to N do

For j:=1 to N-i do

If Grupa [j].FIO>Grupa[j+1].FIO then

begin

St:=Grupa[j];

Grupa[j]:=Grupa[j]+1;

Grupa[j+1]:=St;

end;

{Список після сортування}

For i:=1 to N do begin

With Grupa[i] do begin

Write(FIO);

For k:=1 to 5 do write (OK [k]:5);

Writeln; end; end; end.

Дана програма забезпечує формування масиву записів в пам’ять, сортування всіх записів за алфавітом і виведення відсортованого масиву.

Записи з варіантами.

При визначенні комбінованого типу в нього можна включати варіантну частину. Це означає, що різні змінні (хоч і відносяться до одного типу) можуть мати різні структури, тобто містять змінні поля. В цьому випадку список полів запису містить загальну частину і варіантну частину. В описі запису перераховуються всі можливі варіанти даної структури. Вибір варіанту запису виконується в залежності від значення селектора варіанту в записі. Селектором варіанту в записі являється тип запису. Ключове слово ставиться в кінці опису всього запису і означає кінець варіанту. Після варіантної частини запису ніякі поля з'являться не можуть. Імена полів, що використовуються в описі різних варіантів, не повинні повторюватися в одному і тому самому записі. Неможна також застосовувати одне і те саме ім'я для визначення полів в загальній та варіантній частинах запису.

Варіантна частина може містити інші записи, в тому числі і з варіантами. Степінь вкладеності записів в варіантній частині не обмежена. Оператор Case не закривається службовим словом End. Всі варіанти описуються в середині оператора Case. Кожен варіант характеризується заданим в дужках списком опису відповідних йому компонентів. Перед списком стоять мітки. Їх тип вказується в заголовці варіантної частини (на відміну від оператора варіанту, де селектором варіантної частини являється вираз, а не тип). Тип повинен бути скалярним і задаватися ім'ям. В явному виді вказувати тип в заголовці забороняється. Часто для скорочення запису поле признаку включається в заголовок варіантної частини.

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

Type pol=(m,j);

A=record

Fio: array[1..20] of char;

God:1900..2000;

Naz:char;

B:pol;

Case pol of

m: (військовозабов 'язаний: boolean;

спеціальність: array[1..20] of char);

j(заміжня: boolean);

end; var x,y: a;

Файли.

Під файлом розуміється любий набір даних. Часто виникає потреба зберігати оброблені дані на зовнішньому носії. В цьому випадку дані оформляються у вигляді зовнішніх файлів. [Створення зовнішніх файлів даних для постійного зберігання на магнітному диску і можливість обробляти ці файли в програмі являється ефективним засобом програмування]. В мові Паскаль файл представляє собою послідовність елементів одного типу. На відміну від масиву довжина файлу не задається, місце елементів не визначається індексом, і кожен елемент стає доступним тільки після перебору всіх попередніх елементів. Такі файли називаються послідовними. Якщо програма взаємодіє з зовнішніми файлами, то файли повинні бути описані у програмі або явно в розділі опису змінних або у розділі опису типів Туре:

Var ім'я_файлу: File оf<базовий тип>;

Приклад: var F:file of char;

F1:file of integer;

Файли символьних даних називаються текстовими файлами. Опис текстового файлу file of char еквівалентно опису text.

Опис файлу в розділі типів:

Туре ім'я_типу=FіІе of <базовий тип>;

Var ім'я_файлу: iм)я_типу;

ЧИТАННЯ ФАЙЛІВ.

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

1 . відкрити файл для читання;

2. ввести дані файлу в програму;

3. закрити файл для читання.

Зовнішній файл, з якого читаються дані називається вхідним файлом.

Загальна форма читання файлу:

1.RESET(ім’я);

2.READ (ім'я, параметри);

3.CLOSE (ім'я);

В деяких версіях оператор RESET може мати декілька аргументів:

RESET (ім'я1, 'ім'я2','ім'яЗ', ім'я4);

Ім 'я1 - файлова зміна, яка у програмі описана як файл. Вона встановлює зв'язок з фізичним ім'ям файлу.

Ім 'я2 - фізичне ім'я;

Ім 'яЗ - розширене ім'я;

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

Оператор введення для читання файлу володіє усіма властивостями звичайного оператора Read. В якості параметрів можуть бути змінні. Кожна змінна отримує значення одного елементу, зчитаного з зовнішнього файлу. Змінні повинні бути описані у програмі відповідно до свого типу. Так як за означенням число елементів файлу не задається, то в мові Паскаль введено поняття кінця файлу: ЕОF(ім 'я); . Це стандартна функція. Вона приймає істинне значення, якщо досягнутий кінець файлу, хибне - у протилежному випадку. Функцію EOF можна використовувати в операторі циклу. Елементи у файлі зберігаються по рядкам. Для переходу на новий рядок файлу використовується оператор: Readln(iм 'я);

Задача: дано Var F:File of integer;

x,y: integer;

Нехай файл містить 2 елемента: 3 і 7. Яке значення буде мати змінна у після виконання операторів:

program fa;

var f:file of integer;

x,y: integer;

 

a) reset(f);

Read(f,y);

If NOT ЕОF(f) then Read(f,y); Close(f);

(7)

б)Reset(f);

y:=0;

while not ЕОF(f) do

begin

Read(f,x);

y:=y+x;

end.

(10)

в)Reset(f);

y:=1;

repeat

Read(f,x)

y:=y*x

until ЕОF(f);

(21)

Приклад: на диску є файл з ім'ям d.dat, в якому задана послідовність дійсних чисел в декілька рядків:

0.5 1.7 6.4 0.2

1.3 5.2 0.9 1.8

5.6 7.3

Треба ці дані зробити доступними програмі і обчислити їх суму.

program fa2;

type k=file of real;

var s:k;

sum, i: real;

11: integer;

begin

sum: =0;

reset(s,’d’,’dat’,11);

while not eof(s) do

begin

while not eoln do

begin

read(s,i);

sum:= sum+i;

end;

readln(s);

end;

witeln ('sum=', sum:4:2);

close(s);

end.

S - це файлова змінна, яка встановлює зв'язок з файлом d.dat. Фізичне ім'я вказується тільки при відкритті файлу в операторі RESET. В інших операторах при необхідності роботи з файлом вказується файлова змінна S. Оператор READ (s, і); зчитує дані по одному з зовнішнього файлу у змінну і. Після оператора CLOSE(S); дані файлу стають недоступними програмі.

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

В програмі необхідно:

1. Відкрити файл для запису,

2. Вивести дані;

3. Закрити файл для запису.

Зовнішній файл, в якому записуються дані з програми називається вихідним.

Загальна форма запису має наступний вигляд:

Rewrite(ім’я);


<== попередня лекція | наступна лекція ==>
РЕКУРСИВНІ СТРУКТУРИ. | ЧИТАННЯ ТА ЗАПИС ФАЙЛІВ.


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