Записи. Оператор присоединения
Запись – совокупность элементов разных типов. Определение типа запись начинается идентификатором 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. Вычислите значения отношений:
5. var x, y, z : set of 8..22; Переменной x присвойте множество всех целых чисел от 8 до 22, переменной у – множество всех простых чисел из этого диапазона, а переменной z – множество всех составных чисел из этого же диапазона. Файловые типы
Файл – это последовательность однотипных компонентов, расположенных на внешнем носителе. Тип этих компонентов может быть любым за исключением типа файл. Файловые переменные используются для ввода-вывода информации. Существует три категории файлов, работа с которыми отличается друг от друга: 1) текстовые (тип Text); 2) типизированные (file of <тип>); 3) файлы без типа (file). Обычно все файлы считаются файлами последовательного доступа, но для типизированных файлов и файлов без типа с помощью процедуры Seek можно установить режим произвольного доступа. При этом нумерация компонентов файла начинается с нуля. После работы с файлом он должен быть закрыт процедурой Close. Ниже приведены некоторые стандартные процедуры и функции для работы с файлами:
Пример 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:
В модуле CRT можно устанавливать цвета фона и цвета символов и с помощью следующих мнемонических констант:
Управление звуком
В модуле CRT имеется возможность управления звуком. Можно генерировать звуковые сигналы частотой 37 – 32767 Гц. Сила (громкость) звука не регулируется. Для управления частотой звука и его продолжительностью в языке Паскаль используются стандартные процедуры Sound, NoSound и Delay. Sound - заставляет динамик звучать с нужной частотой; NoSound - отключает динамик; Delay - вводит задержку звука в миллисекундах. Например: begin Sound(500); {звуковой сигнал частотой 500 Гц} Delay(2000); {в течение 2 секунд} NoSound; {отключение динамика} end; С помощью циклов и Sound можно организовать сирены, будильники, метрономы, пение птиц, фрагменты музыкальных произведений.
Пример 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.
Пример 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 с.
Популярное: Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Генезис конфликтологии как науки в древней Греции: Для уяснения предыстории конфликтологии существенное значение имеет обращение к античной... Почему двоичная система счисления так распространена?: Каждая цифра должна быть как-то представлена на физическом носителе... Как выбрать специалиста по управлению гостиницей: Понятно, что управление гостиницей невозможно без специальных знаний. Соответственно, важна квалификация... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (774)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |