Процедуры работы с множествами

 

Incude(множество, элемент) – включает новый элемент во множество.

Exclude(множество, элемент) – исключает элемент из множества.

 

Замечание: добавлять элементы во множество можно и без использования процедуры Include следующим образом:

Program DemoInc;

Var

S:set of Char;

ch:Char;

Begin

S:=[]; {определили пустое множество}

ReadLn (ch); {ввели значение}

S:=S+[ch]; {добавили во множество}

End.

 

Пример. Дана строка. Сформировать и распечатать множество гласных букв английского алфавита, содержащихся в строке.

 

Program DemoSet;

Const

Engl_Gl:set of Char=[’a’,’e’,’u’,’i’,’о’,’y’];

Var

St :String;

Gl :set of char;

i :Integer;

ch :Char;

Begin

WriteLn(’Введите строку:’);

ReadLn(St);

{Формируем множество}

Gl:=[];

For i:=1 to Length(St) do

If St[i] In Engl_Gl then Include(Gl,St[i]);

{Вывод элементов множества}

WriteLn (’Множество гласных букв, содержащихся в

строке:’);

For ch:=’a’ then ’z’ do

If ch In Gl then Write (ch:2);

End.


ЗАПИСИ

Фиксированные записи

Запись – это структурированный тип данных, состоящий из фиксированного числа компонент разного типа.

Определение типа записи начинается идентификатором record и заканчивается зарезервированным словом end. Между ними заключен список компонентов, называемых полями, с указанием идентификаторов полей и типа каждого поля.

Формат описания записи:

Type

имя_типа=record

идентификатор_поля: тип_компоненты;

идентификатор_поля: тип_компоненты

end;

Var

идентификатор: имя_типа;

 

Пример:

Type

Sved=record

Fam :String[20];

God :Integer;

Nom_gr :String[10];

Adres :String[50]

end;

Var

Ank,S:Sved;

 

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

Ank.Fam

Все действия производятся над полями записи, только операцию присваивания можно выполнить над всей записью.

S:=Ank;

Массив записей описывается следующим образом:

Var

Mas:array[1..10] of Sved;

Для более простого обращения к полям записей используется оператор присоединения with:

With переменная_типа_запись do

оператор;

Один раз указав переменную типа запись в операторе with, можно работать с именами полей, как с обычными переменными, т.е. без указания перед идентификатором поля имени переменной, определяющей запись:

Использование переменной типа запись With Ank do begin Write(Fam); ... end; Использование массива записей For i:=1 to N do With Mas[i] do begin Write(Fam); ... end;

Сравните, без использования оператора with:

Использование переменной типа запись Write(Ank.Fam); ...   Использование массива записей For i:=1 to N do begin Write(Mas[i].Fam); ... end;

 

Паскаль допускает вложение записей друг в друга (т.е. поле записи может быть в свою очередь тоже записью), соответственно оператор with может быть вложенным. Уровень вложения не должен превышать 9.

With rv1 do

With rv2 do

With rvn do оператор;

Вместо последней записи можно использовать более короткую:

With rv1,rv2,…,rvn do оператор;

Здесь rv1,rv2,…,rvn переменные типа запись.

 

Пример вложенных записей:

Type

Tfio=record

Fam :String;

Name :String;

Otch :String

end;

Tdata=record

Month :1..12;

Year :1900..2005;

Day :1..31;

end;

Sved=record

Fio:Tfio;

Data:Tdata;

Adr:String

end;

 

Записи можно описывать с помощью типизированных констант следующим образом:

Const

идентификатор:тип=(список_значений_полей);

Список значений полей представляет собой список из последовательностей вида:

имя_поля: константа

Элементы списка отделяются друг от друга двоеточиями.

Пример:

Type

point=record

x,y:real

end;

vect=array[0..1] of point;

month=(Jan, Feb, Mar, Apr, May, Jun, Jly, Aug,

Sep, Oct, Nov, Dec);

date=record

d:1..31;

m:month;

y:1900..2005

end;

Const

Origon:point=(x:0; y:-1);

Line:vector=((x:-3.1; y:1.5),

(x:5.9; y:3.0));

SomeDay:date=(d:16; m:Mar; y:2005);

 

Пример. Описать массив записей, содержащих сведения о сдаче студентами сессии. Структура записи: фамилии студента, номер группы, результаты сдачи трех экзаменов. Распечатать список студентов, получающих стипендию. Условие получения стипендии – средний балл больше 5.

 

Program Zapisi;

Uses Crt;

Type Sved=record

Fio:String[50]; {Фамилия}

Nom:String[10]; {Номер группы}

b1,b2,b3:0..10; {Результаты сдачи экзаменов}

sb:Real; {Средний балл}

end;

Var

Mas:array[1..10] of Sved;

i,N:Byte;

{формирование массива записей}

Procedure Vvod;

Begin

Write ('Введите количество записей N=');

ReadLn (N);

For i:=1 to N do

With Mas[i] do

Begin

Clrscr;

Write ('ФИО -->');

ReadLn(Fio);

Write ('Группа -->');

ReadLn(Nom);

Write ('Оценки -->');

ReadLn(b1,b2,b3);

sb:=(b1+b2+b3)/3;

End

end;

{вывод исходного массива записей}

Procedure Vivod;

Begin

clrscr;

WriteLn ('Сведения о студентах:');

WriteLn ('Фамилия Группа Оценки Средний балл');

For i:=1 to N do

With Mas[i] do

WriteLn (Fio:10,Nom:10,b1:2,b2:2,b3:2,sb:5:1);

Repeat Until KeyPressed;

end;

{вывод списка студентов, получающих стипендию}

Procedure Obr;

Begin

Clrscr;

WriteLn ('Студенты, получающие стипендию');

WriteLn ('Фамилия Группа Оценки Средний балл');

For i:=1 to N do

With Mas[i] do

If sb>5 then

WriteLn (Fio:10,Nom:10,b1:2,b2:2,b3:2,sb:5:1);

Repeat Until KeyPressed;

end;

Begin

Vvod;

Vivod;

Obr;

End.

Записи с вариантами

 

Рассмотренные выше записи имеют строки определенную структуру. В языке Pascal имеется возможность задать тип записи, содержащий произвольное число вариантов структуры. Такие записи называются записями с вариантами. Записи с вариантами обеспечивают средства объединения записей, которые похожи, но не идентичны по форме. Они состоят из необязательной фиксированной и вариантной частей. Использование фиксированной части не отличается от описанного выше. Вариантная часть формируется с помощью оператора case. Он задает особое поле записи – поле признака, которое определяет, какой из вариантов в данный момент будет активизирован. Значением признака в каждый текущий момент выполнения программы должна быть одна из расположенных далее констант. Константа, служащая признаком, задает вариант записи и называется константой выбора.

Формат описания записи с вариантами:

Type

имя_типа=record

{фиксированная часть}

идентификатор_поля: тип_компоненты;

идентификатор_поля: тип_компоненты;

{вариантная часть}

Case поле_признака: имя_типа of

константа_выбора_1: (поле,…:тип);

константа_выбора_n: (поле,…:тип)

end;

 

У части case нет отдельного end. Одно слово end заканчивает всю конструкцию записи с вариантами.

Пример:

Type

tzap=record

{фиксированная часть}

Nomer :Byte;

Article :String;

{вариантная часть}

Case flag: Boolean of

True: (cena1:Integer);

False: (cena2:Integer);

end;

Var

zap:tzap;

 

При использовании записей с вариантами следует придерживаться следующих правил:

· все имена полей должны отличаться друг от друга по крайней мере одним символом, даже если они встречаются в разных вариантах;

· запись может иметь только одну вариантную часть, причем, она должна размещаться в конце записи;

· если поле, соответствующее какой-либо метке, является пустым, то оно записывается следующим образом:

метка: ();

 

Записи с вариантами также можно задавать с помощью типизированных констант. При задании такой записи указываются только один из возможных вариантов констант:

Type

Forma=record

Case Boolean of

True :(BirthPlace:String[40]);

False:(Country:String[20];

EntryPort:String[20];

EntryDate:array[1..3] of Word;

Count:Word)

end;

Const

Person1:forma=(Country:’Норвегия’;

EntryPort:’Мурманск’;

EntryDate:(16, 3, 89);

Count: 12);

Person2:(BirthPlace:’Москва’);

 

Пример записей с вариантами. Ученики некоторого класса подразделяются на 3 группы:

· занимающиеся в спортивном кружке,

· занимающиеся в кружке туризма,

· нигде не занимающиеся.

В информации о школьниках первой группы нужно указать:

· вид спорта (легкая атлетика, футбол, волейбол, баскетбол),

· спортивный разряд (первый, второй, третий, кандидат в мастера спорта, мастер спорта);

второй группы:

· вид туризма (водный, пеший, горный),

· категорию самого сложного похода (1-6);

третьей группы:

· причину неучастия (болен, не успевает).

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

Program Sсhool;

Uses Crt;

Type

Tzan=(Sport,Turizm,Bez); {вид занятий}

Tvid=(L_a,Fut,Vol,Bas); {вид спорта}

Trazr=(r1,r2,r3,kms,ms); {разряд}

Tvidt=(Pe,Vo,Go); {вид туризма}

Tbez=(Bol,Neus); {причина безделия}

Data=record{дата рождения}

D:1..31; {день}

M:1..12; {месяц}

Y:1900..2100 {год}

end;

Sc=record

Fam:String[20]; {фамилия}

Voz:Data; {возраст}

Class:1..12; {класс}

Case Zan:Tzan of

Sport:(Vid:Tvid;Rasr:Trazr);

Turizm:(Vidt:Tvidt;Kat:1..6);

Bez:(Pr:Tbez)

end;

Var

Mas:array[1..10] of Sc;

i,p,k,N:Byte;

{Ввод массива записей с вариантами}

Procedure Vvod;

Begin

Write ('Количество учеников N=');

ReadLn (N);

For i:=1 to N do

With Mas[i] do

Begin

Clrscr;

Write ('Фамилия -->');

ReadLn (Fam);

Write ('Дата рождения -->');

ReadLn (Voz.D,Voz.M,Voz.Y);

Write ('Класс -->');

ReadLn (Class);

WriteLn ('Вид занятий:');

WriteLn ('1 - спорт');

WriteLn ('2 - туризм');

WriteLn ('3 - бездельник');

Readln (k);

Case k of

1: begin

Zan:=Sport;

Writeln ('Вид спорта:');

WriteLn ('1 - легкая атлетика');

WriteLn ('2 - футбол');

WriteLn ('3 - волейбол');

WriteLn ('4 - баскетбол');

Readln (p);

Case p of

1:Vid:=L_a;

2:Vid:=Fut;

3:Vid:=Vol;

4:Vid:=Bas

end;

Writeln ('Разряд:');

Writeln ('1 - первый');

Writeln ('2 - второй');

Writeln ('3 - третий');

Writeln ('4 - кмс');

Writeln ('5 - мс');

ReadLn (p);

Case p of

1:Rasr:=r1;

2:Rasr:=r2;

3:Rasr:=r3;

4:Rasr:=kms;

5:Rasr:=ms

end;

end;

2: begin

Zan:=Turizm;

Writeln ('Вид туризма:');

WriteLn ('1 - пеший');

WriteLn ('2 - водный');

WriteLn ('3 - горный');

Readln (p);

Case p of

1:Vidt:=Pe;

2:Vidt:=Vo;

3:Vidt:=Go

end;

Write ('Категория 1..6 ->');

Readln (Kat);

end;

3: begin

Zan:=Bez;

WriteLn ('Причина неучастия:');

WriteLn ('1 - болеет');

WriteLn ('2 - неуспевает');

Readln (p);

Case p of

1:Pr:=Bol;

2:Pr:=Neus

end;

end;

end;

End

end;

{Вывод массива записей с вариантами}

Procedure Vivod;

Begin

Clrscr;

WriteLn ('Сведения о учениках:');

WriteLn ('Фамилия Дата рождения Класс Вид занятий');

For i:=1 to N do

With Mas[i] do

Begin

Write (Fam:10);

Write (Voz.D:3,Voz.M:4,Voz.Y:5);

Write (Class:6);

Case Zan of

Sport: begin

Write (' спорт :');

Case Vid of

L_a:Write (' легкая атлетика ');

Fut:Write (' футбол ');

Vol:Write (' волейбол ');

Bas:Write (' баскетбол ')

end;

Write (' Разряд:');

Case Rasr of

r1:Write (' первый');

r2:Write (' второй');

r3:Write (' третий');

kms:Write (' кмс');

ms:Write (' мс')

end;

end;

Turizm: begin

Write (' Туризм: ');

Case Vidt of

Pe: Write (' пеший');

Vo: Write (' водный');

Go: Write (' горный')

end;

Write (' Категория ',Kat);

end;

Bez: begin

Write (' Бездельник:');

Case Pr of

Bol: Write (' болеет');

Neus: Write (' неуспевает')

end;

end;

end;

Writeln;

end;

end;

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

Begin

Clrscr;

Vvod;

Vivod;

Repeat Until KeyPressed;

End.

 


ФАЙЛЫ

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

Любой файл имеет три характерные особенности:

1. У файла есть имя, что дает возможность программе работать одновременно с несколькими файлами.

2. Файл содержит компоненты одного типа. Типом компонент может быть любой тип, кроме файлов.

3. Длина вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти.

Файловый тип или переменную файлового типа можно задать одним из трех способов:

имя_файлового_типа=File of тип_компонент;

имя_файлового_типа =Text;

имя_файлового_типа =File;

которым соответствуют три вида файлов:

· типизированный файл,

· текстовый файл,

· нетипизированный файл.

 








Дата добавления: 2015-04-15; просмотров: 771;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.103 сек.