Мегаобучалка Главная | О нас | Обратная связь


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



2016-01-26 736 Обсуждений (0)
Записи. Оператор присоединения 0.00 из 5.00 0 оценок




 

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

Формат:

Type

<имя> = record

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

<идентификатор поля> : <тип компонента>

end;

var <идентификатор> : <имя типа>;

Например:

Type

mashina = record

nomer : integer;

marka : string[20];

fio : string[40];

end;

var m, v : mashina;

Для доступа к полям записи применяется либо квалификационное имя, либо оператор присоединения with. Квалификационное имя состоит из идентификатора переменной и идентификатора поля, разделенных точкой. Например: m.nomer, m.marka.

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

with <переменная> do <оператор>;

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

Пример 10.1 type str = packed array [1..8] of char;

adr = record

gorod, prosp : str;

dom, kvart : 1..999

end;

var adr1, adr2 : adr;

Используя оператор присоединения, присвойте переменной adr1 значение, соответствующее адресу: Астана, пр. Республики, д.7, кв. 39. Кроме того, переменной adr2 присвойте такое же значение, заменив в нем номер квартиры на 17.

with adr1 do

Begin

gorod := ‘Астана ’;

prosp := ‘Республики ‘;

dom := 7;

kvart := 39

end;

adr2 := adr1; adr2.kvart := 14;

Задание 10.1

1. Опишите запись для представления следующего понятия:

а) цена в тенге и тиын;

б) время в часах, минутах и секундах;

в) дата (число, месяц, год);

г) семинар (предмет, преподаватель, номер группы, день недели, часы занятия, аудитория);

д) бланк требования на книгу (сведения о книге: шифр, автор, название; сведения о читателе: номер читательского билета, фамилия; дата заказа);

е) экзаменационная ведомость (предмет, номер группы, дата экзамена, 25 строчек с полями: фамилия студента, номер зачетной книжки, оценка за экзамен).

2. type stroka = packed array [1..15] of char;

vershina = record

nazvanie : stroka;

vysota : 1000..9999

end;

spisok : array [1..30] of veshina;

Опишите процедуру SamajaVysokaja(C), печатающую название самой высокой вершины из списка С.

3. Ответьте на следующие вопросы:

а) Верно ли, что все поля записи должны быть разных типов?

б) Почему при описании записи все поля могут перечисляться в любом порядке?

в) Верно ли, что названия полей могут совпадать с именами переменных, констант и других объектов программы, но не могут совпадать с названиями полей других записей?

4. type complex = recordre, im : real end;

point = record x, y : real end

var z, w : complex; p : point; re : real;

Определите, какие значения будут иметь переменные z, w, p и re после выполнения следующих операторов:

with z do begin re := 0; im := 1 end;

w := z; re := 2;

with z do re := 1;

with z, w do im := - im;

with p do begin x := re; y := 2 end;

5. type name = (Aiman, Sholpan, Sveta, Tanya, Marat, Kairat, Sasha, Pasha);

data= recordpol : (man, woman);

rost : 150..200 end;

gruppa = array [name] of data;

Опишите:

а) функцию srednrost(gr), определяющую средний рост женщин из группы gr;

б) функцию vysoki(gr) для определения имени самого высокого мужчины из группы gr;

в) логическую функцию odinrost(gr), проверяющую, есть ли в группе gr хотя бы два человека одного роста.

 

Множественные типы

 

Множество – это структурированный тип данных, представляющий набор взаимосвязанных по какому-либо признаку объектов, которые можно рассматривать как единое целое. Формат:

Type

<идентификатор> = set of <тип множества>;

Множество задается перечислением значений или отрезком типа, или именем скалярного типа. Например:

Type

den = set of (sun, mon, tue, wen, thu, fri, sat);

letter = set of ‘a’..’z’;

dni = set of 1..31;

Задание 11.1

1. type

bits = set of 0..1;

var x : bits; y : set of (a, b, c);

z : set of ‘*’..’*’;

Ответьте на следующие вопросы:

а) Каков базовый тип каждого из указанных множественных типов?

б) Сколько и какие значения могут принимать каждая из переменных x, y и z?

2. type M = set of 0..99;

Опишите функцию card(A), подсчитывающую количество элементов в множестве A типа M. (Например, card([5, 8, 23]) = 3.)

3. Опишите процедуру print(A), печатающую в алфавитном порядке все элементы множества А, имеющего тип letter.

4. Вычислите значения отношений:

а) [2] <> [2, 2, 2]; д) ‘q’ in [‘a’..’z’];
б) [‘a’, ‘b’] = [‘b’, ‘a’]; е) trunc(3.9) in [1, 3, 5];
в) [4, 5, 6] = [4..6]; ж) [2] < [1..3];
г) [2, 3, 5, 7] <= [1..9]; з) 77 = [77].

5. var x, y, z : set of 8..22;

Переменной x присвойте множество всех целых чисел от 8 до 22, переменной у – множество всех простых чисел из этого диапазона, а переменной z – множество всех составных чисел из этого же диапазона.

Файловые типы

 

Файл – это последовательность однотипных компонентов, расположенных на внешнем носителе. Тип этих компонентов может быть любым за исключением типа файл.

Файловые переменные используются для ввода-вывода информации.

Существует три категории файлов, работа с которыми отличается друг от друга:

1) текстовые (тип Text);

2) типизированные (file of <тип>);

3) файлы без типа (file).

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

Ниже приведены некоторые стандартные процедуры и функции для работы с файлами:

Процедура Назначение
Assign (f, name) связь файловой переменной f с внешним файлом name;
Chdir (path) изменение текущей директории, где path - путь;
Close (f) закрытие открытого файла;
Erase (f) уничтожение внешнего файла;
Getdir (n, s) получение текущего каталога накопителя, где s – переменная для хранения текущего накопителя, а n – номер накопителя, принимающий следующие значения: 0– текущий накопитель, 1 – накопитель А:, 2 – накопитель В и т.д.;
Mkdir (path) создание каталога;
Rename (f, new) Переименование внешнего файла;
Reset (f [, size]) Открытие существующего файла;
Rewrite (f [, size]) Открытие нового пустого файла, которому присваивается имя, заданное процедурой Assign.
Rmdir (path) Удаление пустого каталога
Eof (f) конец файла
Ioresult Результат последней операции ввода-вывода: 0 – операция завершена успешно, иначе – другое число.

Пример 12.1 Считать файл one, удвоив каждый его элемент через пробел (файл one был создан ранее и наполнен данными).

program p121;

var f1, f2 : Text; x : char;

Begin

assign(f1, ‘c:\e\one); {привязка файла one к файловой переменной f1}

reset (f1); {открытие файла one на чтение}

assign(f2, ‘ ‘); {привязка файловой переменной f2 к экрану}

rewrite(f2); {открытие файла one на вывод}

while not eof(f1) do

Begin

read(f1, x);

write(f2, x + ‘ ‘ + x)

end;

writeln;

close(f1); close(f2)

End.

Задание 12.1

1. Ответьте на вопросы:

а) Верно ли, что элементы файла должны быть одного типа и что файл отличается от массива только тем, что размер (количество элементов) файла произволен, а размер массива фиксирован?

б) Можно ли, считав из файла пятый элемент, затем сразу же считать второй элемент? А какой можно?

в) Верно ли, что считав из файла пятый элемент, затем уже никогда нельзя считать его второй элемент?

г) В какое место файла можно добавлять новые элементы: в начало, в середину, в конец, куда угодно, никуда?

д) Если не переписывать значения заново, то значения каких его элементов можно менять: только первого, только последнего, каких угодно, никаких? А какие элементы можно удалять из файла (при том же условии)?

е) Верно ли, что в одно и то же время нельзя считывать из файла и записывать в него? Верно ли, что, начав считывать из файла, затем уже никогда нельзя записывать в него? А наоборот?

ж) Можно ли сравнивать файлы или присваивать один файл другому?

2. type ryad = file of 0..999;

Опишите логическую функцию upor(r), проверяющую, упорядочены ли по возрастанию элементы непустого ряда r.

3. type textovka = file of char;

Опишите логическую функцию eq(t1, t2), проверяющую тексты f1 и f2 на равенство.

4. Считайте файл, удвоив все буквы ‘а’.

5. Прочитайте файл и определите, сколько раз в нем встречается буква а.

6. Прочитайте файл и найдите сумму цифр, встречающихся в нем.

7. Постройте конкатенцию (сцепление или последовательную запись) файла самого с собой.

8. Прочитайте файл и выведите его задом наперед.

9. Постройте конкатенцию файла самого собой, только записанного задом наперед.

10. Удалите в файле текст после первой точки.

 

Модуль Crt

 

Модуль CRT представляет собой библиотеку функций и процедур, предназначенных для увеличения возможностей текстового ввода-вывода данных.

 

Работа с текстом

 

Для задания одного из текстовых режимов предназначена процедура Textmode(mode : word), где mode - код текстового режима, который может принимать значения:

- BW40 = 0 - черно-белый режим 40x25;

- CO40 = 1 - цветной режим 40x25;

- BW80 = 2 - черно-белый 80x25;

- CO80 = 3 - цветной режим 80x25;

- MONO = 7 - монохромный для ч/б адаптеров

Какой бы режим не был установлен, координаты верхнего левого угла экрана всегда определяются как x1 = 1 и y1 = 1.

Ниже перечислены некоторые процедуры и функции модуля CRT:

Функция или процедура Назначение
Keypressed определяет, была ли нажата клавиша на клавиатуре;
Readkey читает значение нажатой клавиши;
Textbackground определяет цвет фона;
Textcolor цвет выводимых символов;
Textmode определяет текстовый режим;
Clrscr очищает экран и устанавливает курсор в верхний левый угол экрана;
Window определяет текстовое окно на экране;
Wherex возвращает значение горизонтальной координаты
Wherey возвращает значение горизонтальной координаты
Gotoxy переводит курсор в указанное место
Delline Уничтожает всю строку с курсором
Insline вставляет строку
Clreol стирает часть строки от курсора до правой границы
Highvideo Устанавливает повышенную яркость символов
Normvideo Устанавливает нормальную яркость символов
Lowvideo Устанавливает пониженную яркость символов
Assigncrt связывает текстовый файл с окном CRT

В модуле CRT можно устанавливать цвета фона и цвета символов и с помощью следующих мнемонических констант:

Black = 0 Черный darkgray = 8 темно-серый
blue = 1 темно-синий lightblue = 9 голубой
Green = 2 темно-зеленый lightgreen = 10 салатовый
cyan = 3 Бирюзовый lightcyan = 11 светло-бирюзовый
red = 4 Красный lightred = 12 розовый
Magenta = 5 Фиолетовый lightmagenta = 13 малиновый
Brown = 6 Коричневый yellow = 14 желтый
Lightgray = 7 светло-серый blink = 125 мерцание символа

Управление звуком

 

В модуле CRT имеется возможность управления звуком. Можно генерировать звуковые сигналы частотой 37 – 32767 Гц. Сила (громкость) звука не регулируется.

Для управления частотой звука и его продолжительностью в языке Паскаль используются стандартные процедуры Sound, NoSound и Delay.

Sound - заставляет динамик звучать с нужной частотой;

NoSound - отключает динамик;

Delay - вводит задержку звука в миллисекундах.

Например:

begin

Sound(500); {звуковой сигнал частотой 500 Гц}

Delay(2000); {в течение 2 секунд}

NoSound; {отключение динамика}

end;

С помощью циклов и Sound можно организовать сирены, будильники, метрономы, пение птиц, фрагменты музыкальных произведений.

Нота Малая октава Первая октава Вторая октава
До 261,63 523,25 1046,50
Ре 293,66 587,33 1174,07
Ми 329,63 659,26 1318,15
Фа 349,23 698,46 1396,05
Соль 392,00 784,99 1568,00
Ля 440,00 880,00 1760,00
Си 493,88 987,77 1975,00

 

Пример 13.1 Электронный композитор.

procedure makermusic;

var i : integer;

begin i := 1;

repeat i := i + 1;

sound (random(180) + 40 +i);

delay(170);

nosound;

delay(100)

until keypressed

end;

Пример 13.2 Имитация музыкального инструмента (на дополнительной цифровой клавиатуре).

program p132;

const m : array[1..8] of integer = (262, 294, 330, 349, 392, 440, 494, 523);

var i : integer; ch : char;

Begin

while true do

Begin

ch : readkey;

case ch of

#49 : i := 1;

#50 : i := 2;

#51 : i := 3;

#52 : i := 4;

#53 : i := 5;

#54 : i := 6;

#55 : i := 7;

#48 : Halt {выход при нажатии 0}

else write(‘Клавише звук не назначен’)

end;

sound(m[i]);

delay(100);

nosound

end;

End.

Задание 13.1

1. Нарисуйте с помощью процедуры Window на экране прямоугольник и заставьте его двигаться по горизонтали, сопровождая движение звуком.

2. На экране несколько раз разными цветами напечатайте фразу «2 курс», расположив эти надписи лесенкой.

3. Нарисуйте на экране несколько вложенных друг в друга разноцветных прямоугольников.

4. Нарисуйте с помощью процедуры Window на экране прямоугольник и заставьте его двигаться по вертикали, сопровождая движение звуком.

5. Нарисуйте с помощью процедуры Window на экране прямоугольник и заставьте его двигаться по диагонали, сопровождая движение звуком.

 

Графика. Модуль Graph

 

Библиотека графических подпрограмм Graph, содержащая более 50 разнообразных процедур и функций, расширяет возможности Паскаля по созданию графических изображений.

Модуль Graph требует установления графического режима. Для того чтобы это стало возможным, необходимо проделать следующие действия:

1) в программе должна быть ссылка на модуль

uses graph;

2) работу модуля нужно инициировать командой:

initgraph (driver, mode, ‘C:\Pascal\BGI’);

где driver - параметр установки типа графического драйвера видеоадаптера; mode - задание режима его работы; ‘C:\Pascal\BGI’ - строка, указывающая на путь к директории, где расположены графические драйверы *.BGI. Если в той же директории, где находится ваша программа, располагается и требуемый драйвер, то эта строка должна быть пуста, т.е. initgraph (driver, mode, ‘ ’);

необходимо настроить среду Паскаль. Для этого в меню Options – Directories среды в поле Unit необходимо указать каталог, где размещен файл graph.tpu.

Если вы затрудняетесь указать режим работы вашего видеоадаптера, то позвольте системе определить это самой с помощью функции detect. Например:

program p14;

uses graph;

var driver, mode : integer;

Begin

driver := detect;

initgraph(driver, mode, ‘C:\Pascal\BGI’);

Перед выходом из программы графический режим нужно закрыть командой Closegraph.

Функция или процедура Назначение
Arc построение дуги окружности
Bar построение закрашенного прямоугольника
Circle построение окружности
ClearDevice очистка экрана и заливка его цветом фона
Ellipse построение эллипса
Getmaxx возвращает максимальную координату х
Getmaxy возвращает максимальную координату у
Line рисует линию
OutText выводит текст
PutPixel рисует точку
Rectangle рисует прямоугольник
SetBkColor задает цвет фона
SetColor задает цвет линий

 

Пример 14.1 Построить семейство разноцветных случайным образом расположенных окружностей.

program p14;

uses graph;

var driver, mode : integer;

Begin

driver := detect;

initgraph(driver, mode, ‘C:\Pascal\BGI’);

Repeat

setcolor(random(16));

x := random(getmaxx);

y := random(getmaxy);

circle(x, y, 10);

delay(10)

until keypressed;

closegraph

End.

Задание 14.1

1. Постройте семейство одинаковых кругов, центры которых расположены на синусоиде.

2. Постройте семейство разноцветных случайным образом расположенных окружностей.

3. Постройте семейство разноцветных случайным образом расположенных линий.

4. По периметру экрана постройте семейство разноцветных квадратиков, а в середине – множество разноцветных точек.

5. Постройте семейство одинаковых окружностей, центры которых лежат на окружности большего диаметра.

Список литературы

 

1. Паскаль для персональных компьютеров: Справ. пособие / Ю.С. Бородич, А.Н. Вальвачев, А.И.Кузьмич. – Мн.: Выш.шк.: БФ ГИТМП «НИКА», 1999. – 365 с.

2. Абрамов В.Г., Трифанов Н.П., Трифонова Г.Н. Введение в язык Паскаль. – М.: Наука, 2000. – 224 с.

3. Учимся программировать: PASCAL 7.0. Задачи и методы их решения. – 2-е изд., перераб. и доп. – М.: «Диалог – МИФИ», 1998. – 256 с.

4. Пильщиков В.Н. Сборник упражнений по языку Паскаль: Учеб. пособие для вузов. – М.: Наука, 1989. – 160 с.

5. Абрамов С.А., Зима Е.В. Начала программирования на языке Паскаль. – М.: Наука, 1987. – 112 с.

6. Кнут Д. Искусство программирования для ЭВМ: Пер. с англ. – М.: Мир, 1978. Т.3. – 844 с.

 

 



2016-01-26 736 Обсуждений (0)
Записи. Оператор присоединения 0.00 из 5.00 0 оценок









Обсуждение в статье: Записи. Оператор присоединения

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...
Организация как механизм и форма жизни коллектива: Организация не сможет достичь поставленных целей без соответствующей внутренней...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (736)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.012 сек.)