Мои Конспекты
Главная | Обратная связь


Автомобили
Астрономия
Биология
География
Дом и сад
Другие языки
Другое
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Металлургия
Механика
Образование
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Туризм
Физика
Философия
Финансы
Химия
Черчение
Экология
Экономика
Электроника

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



 

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-2020 mykonspekts.ru Все права принадлежат авторам размещенных материалов.