Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие
.pdf
i, k: integer;
begin
writeln (`введите слово. Количество символов в нем
не должно превышать 20 `);
read (s) ;
k: = 0;
for i:=1 to 20 do
if s[i] = ` f ` then k:= k+1;
writeln (`буква встречается `, k, `раз (а) ` );
end.
2.Формирование новой строки.
Из заданной строки получить новую строку, удалив все «*» и
повторив каждый символ, отличный от звездочки дважды.
Распечатать полученную строку.
Program zadacha;
{формирование новой строки}
Var
S, h : string;
i, k, l, j : integer;
begin
writeln (`введите строку символов `);
read (s) ;
k:=1; l := length (s); j:=1;
for i:=1 to l do
if s[i] <> ` *` then begin
h[j]:= s[i];
h[j+1]:= s[i];
j :=J +2
end;
for i:=1 to 2*l do write ( h[i] )
end.
Множества
Множество – основное, общематематическое, неопределяе-
мое понятие. В обыденной речи используются его синонимы:
91

набор, совокупность, коллекция и др. В математике рассматрива-
Общематематическая запись
Запись на Паскале
{1, 3, 5, 7, 12, 14, 17, 19}
[1, 3, 5, 7, 12, 14, 17, 19]
{0, 1, 2, 3, 4, 5}
[0, 1, 2, 3, 4, 5] или [0 .. 5]
{1, 2, …, n}
[1 .. n]
{a, b, c}
[`a`, `b`, `c`]
ются конечные и бесконечные множества.
В Паскале допускаются только конечные множества, состоящие не более чем из 256 различных элементов. Все элементы
должны быть значениями одного порядкового типа, который называют базовым типом этого множества. Базовый тип можно задавать
диапазоном или перечислением с учетом допустимого количества
элементов и того, что элементы (для целых типов) должны лежать
в диапазоне от 0 до 255. Из стандартных типов в качестве базовых,
очевидно подходят типы Byte и Char.
Конечные множества задаются перечнем их элементов. В
Паскале элементы множества заключаются в квадратные скобки.
Множество может вообще не иметь элементов, т.е. быть пустым,
тогда оно представляется конструкцией [ ].
Таблица 4.9
В квадратных скобках могут находиться и допустимые выражения с переменными, например, [i, j, k] – множество, содержа-
щее текущие значения переменных i, j, k типа Byte или [n..3*n] –
множество, содержащее целые числа от n до 3*n.
Обратите внимание на неправильные записи множеств:
[`abcd, `efgh`] - неверно выбран базовый тип;
[1.4, 1.7] – неверно выбран базовый тип;
[`a`, 7] – элементы множества принадлежат разным типам.
После задания базового типа совокупность значений соответствующего множественного типа определяется автоматически.
В нее входят все возможные множества, являющиеся произвольными комбинациями значений базового типа.
Для описания множественного типа используется словосочетание Set оf, а для присваивания значений переменным этого типа –
оператор присваивания. Например, множественный тип Set of 1..3
использует в качестве базового типа диапазон целых чисел от 1 до
92

3 и его значения могут быть: [1], [2], [3], [1,2], [1,3], [2,3], [1,2,3]
Математиче-
ская запись
Запись на
Паскале
Комментарий
А = В
А = В
Множества А и В совпадают
А В
А <>В
Множества А и В не совпадают
А В
А >= В
Все элементы множества В принадлежат множеству А
(надмножество)
А В
А <=В
Все элементы множества А принадлежат множеству В
(подмножество)
x A
X in А
Значение х принадлежит базовому типу множества А и входит в
множество А
А В
А + В
Объединение множеств А и В
А В
А * В
Пересечение множеств А и В
А \ В
А - В
Разность множеств А и В
и [ ].
Набор операций над множествами в Паскале отражает набор
операций из соответствующего раздела математики. Определения
трех основных функций:
объединением множеств называется множество, состоящее из
элементов, входящих хотя бы в одно из данных множеств;
пересечением (общей частью) множеств называется множество,
состоящее из элементов, входящих в каждое из данных множеств;
разностью (дополнением А в В) двух множеств А и В называет-
ся множество, состоящее из элементов множества А, не входящих в В.
Таблица 4.10
Первые пять операций в таблице – это операции отношения.
Они двухместные и возвращают логическое значение true или false.
Последние три операции создают производные множества. Операнды везде должны быть сопоставимы, т.е. построены на одном
базовом типе.
93

Имеются две оптимизированные процедуры для работы с
одиночными элементами множества – Include (A, x), Exclude (A, x),
которые соответственно включают или исключают элемент х из
множества А.
В операции проверки вхождения элемента в множество, обозначаемой служебным словом in, первый операнд должен принадлежать базовому типу, а второй – множественному типу значений.
Записи
Запись – это структурированный тип данных, состоящий из
фиксированного числа компонент одного или нескольких типов.
Определение типа начинается идентификатором record и за-
канчивается словом end. Между ними заключен список компонент,
называемых полями. Каждое поле состоит из идентификатора и
типа компоненты.
Примеры определения типа:
Туре
PaletteType = record
Size : Byte;
Colors: Array[0..MaxColors] of Shortint
end;
ViewPortType = record
xl,yl,x2,y2: Integer;
Clip : Boolean;
end;
FileRec = record
Handle, Mode, RecSize: Word;
Private : Array[1..26] of Byte;
UserData: Array[1..16] of Byte;
Name : Array(0..79] of Char;
end;
Info = record
1: Word;
94

c: String[7];
m: String[13];
end;
В последнем примере три поля записи, представляющие ин-
формацию о кубе, имеют идентификаторы 1 (длина ребра), с (цвет),
m (материал, из которого изготовлен куб) и содержат типы компонент, отделяемые двоеточием. После объявления в программе переменной типа запись, например, Var Cube: Info, к каждому её по-
лю обращаются, указывая сначала идентификатор переменной, а
затем через точку - имя поля, т.е. cube.c, cubc.l, cube.m. Составные
имена, используются везде, где допустимы переменные того же
типа, что и поле, но имя записи может участвовать только в опе-
рациях присваивания. Если несколько полей имеют одинаковый
тип, то имена полей обычно перечисляют.
Поле записи может иметь практически любой тип: массив,
множество, другая запись. В последнем случае элементы (поля полей) имеют имя, состоящее из трёх частей. На практике чаще всего
используют массивы записей, т.к. записи отражают табличную
форму хранения данных и применяются в различных приложениях
- от бухгалтерских задач до задач системного программирования.
Порядок описания полей в определении записи задаёт их порядок
хранения в памяти, а необходимый для этого объём складывается
из длин полей.
Новый тип можно использовать и для введения в программу
типизированных констант, например,
Type Point = record x,y: Real end;
Vector = Array [0..1] of Point;
Const Origin : Point = (X: 0.0; Y: 0.0);
Line : Vector = ((X: -1.9; Y: 1.7), (X: 2.0; Y: 1.7));
ИЛИ
Type Month= (Jan,Feb,Mar,Apr,May,Jun,Jly,Aug,Sep,Oct,
Nov,Dec);
95

Date = record D: 1..31; M: Month; Y: 1917..2017 end;
Const BirthDate: Date = (D: 26; M: Jun; Y: 1985);
Для упрощения доступа к полям записей при их совместной
обработке предназначен оператор with, имеющий формат:
with <имя переменной> do <onepamop>.
Один раз указав имя переменной типа запись в операторе
with, можно внутри оператора обращаться к полям записи без указания имени. Так фрагменты {1} и {2} ниже задают равносильные
присваивания.
(1) with cube do begin 1: =3 ; с: ='синий' ; m:='деревянный'
end;
(2) cube.1:=3; cube.с:='синий' ; cube.m: ='деревянный' ;
Во многих задачах строго определённая структура записи
ограничивает её применение. Поэтому предусмотрены записи, содержащие произвольное число компонент. Они называются записями с вариантами и состоят из необязательной фиксированной и
вариантной частей. Последняя формируется с помощью оператора
Case. Он задаёт особое поле записи - поле признака, которое определяет, какой из вариантов в данный момент будет активизирован.
Вариантные поля указываются после фиксированных; компоненты
каждого варианта заключаются в круглые скобки; у части Case нет
отдельного слова end. Если в рассматриваемом выше примере потребуется выбор единиц длины для измерения длины ребра куба,
то в запись можно ввести вариантную часть:
Info = record
с: String[7];
m: String[13];
Case L: Char of
'д': (inches: Word);
'c': (cantim: Longlnt);
end;
96

4.10. Графические построения
У большинства компьютеров информация выводится на
экран посредством электронно-лучевой трубки (ЭЛТ) - устройства,
аналогичного тому, которое применяется и в бытовых телевизорах.
Экраны ЭЛТ на протяжении многих лет постоянно совершенствовались: увеличивалась их контрастность, цветовая насыщенность.
В растровой компьютерной графике экран - это прямоугольный
массив точек. Любое изображение на нём образуется как компози-
ция светящихся или погашенных пикселов (Pixel - минимальный
элемент изображения) - крошечных электронных элементов, "выстроенных" по строкам и столбцам. Современные ЭЛТ растрового
типа способны выводить миллионы пикселов. Они создают изображение, перемещая луч на экране слева направо и сверху вниз. В
цветном мониторе три луча, возбуждающие красное, зелёное или
синее свечение пикселов, очень быстро "включаются" и "выключаются", варьируя таким образом интенсивности трёх основных
цветов; в результате создаются десятки миллионов цветовых оттенков.
Существуют различные графические режимы. Например, для
распространённого адаптера Vga их три: VgaHi (640 х 480),
VgaMed (640 х 350), VgaLo (640 % 200). Во всех приведенных ниже
программах используется первый режим, адресующий 640 х 480 =
307200 точек двумя целыми числами х и у - горизонтальным и вер-
тикальным номерами точки. Точка с координатами (0,0) обычно
расположена в левом верхнем углу экрана, а с координатами
(639,479) - в правом нижнем.
Графический курсор или "текущий указатель" (СР - Carrier
Pointer) выполняет те же функции, что и курсор в текстовом режиме, но является невидимым. Следует помнить, что в системе координат дисплея ось Y направлена вниз, поэтому, если указатель надо
переместить вверх, то приращение ординаты должно быть отрицательным. Имеются процедуры и функции для перемещения графического курсора и для определения его текущего положения.
Библиотеку графических подпрограмм, созданную фирмой
Borland и содержащую около 60 процедур и функций, реализует
стандартный модуль Graph. Его средства становятся доступны
97

пользователю после подключения к программе в разделе Uses: Uses
KeyPressed:
boolean
Возвращает True, если на клавиатуре была
нажа т а клав и ша , и False в противном
случае. Не задерживает исполнение программы
ReadKey:char
Читает символ с к лавиатуры без
эхоповтора на экране. Приостанавливает исполнение программы до нажатия на любую
клавишу, кроме Shift, Ctrl, Alt, CapsLock,
Numlock, ScrollLock
WhereX:byte
Возвращает горизонтальную координату текущей позиции курсора относительно текущего окна
WhereY:byte
Возвращает вертикальную координату те-
кущей позиции курсора относительно текущего
окна
Graph. При этом в текущем каталоге, кроме самого модуля
Graph.tpu, должны находиться драйвер egavga.bgi и файлы шриф-
тов *.chr, если их использует программа.
Работа с экраном - МОДУЛЬ CRT.
Модуль CRT содержит подпрограммы управления
текст о вы м выводо м на экран диспле я , звуко вы м генератором и чтением клавиатуры.
В режиме текстового вывода используются следующие
координаты экрана: верхний левый угол экрана имеет координаты 1:1, горизонтальная координата возрастает слева
направо, вертикальная сверху вниз. Если на экране определено окно , все ко о рди н ат ы определ яю тс я относительно
границ окна. Исключением являются координаты процедуры Window установки границ окна, которые всегда задаются
относительно границ экрана.
Некоторые процедуры и функции
Функции
Таблица 4.11
98

Процедуры
ClrEol
Связывает с файловой переменной
устройство CON (клавиатуру для ввода и
экран для вывода)
ClrScr
Очищает экран (окно) и помещает -курсор в
верхний левый угол
Delay(D:word)
Приостанавливает работу программы на
указанное число D миллисекунд
DelLine
Удаляет строку на которой стоит курсор, и
перемещает все строки ниже этой строки
на строку вверх. Нижняя строка очищается
GotoXY(X,Y:byte)
Перемещает курсор в нужное место экрана
(окна)
HighVideo
Устанавливает высокую яркость символа
InsLine
Вставляет пустую строку в позицию
курсора
LowVideo
Устанавливает низкую яркость символа
Norm Video
Устанавливает нормальную яркость
символа
NoSound
Выключает звуковой генератор
Sound(F:word)
Включает звуковой генератор, F - частота
звука (гц)
TextBackground
(Color:byte)
Устанавливает цвет фона
TextColor
(Color: byte)
Устанавливает цвет символа
TextMode
(Mode:word)
Устанавливает нужный текстовый режим
Window
(Xl,Yl,X2,Y2:byte)
Определяет текстовое окно на экране.
X1.Y1 -координаты левого верхнего угла;
X2,Y2- правого нижнего угла
Таблица 4.12
99

Константы цветов
Тип
(русск)
Тип
(англ)
№ типа
Сплошная
SolldLn
0
Точечная
DottedLn
1
Штрихпунктирная
CenterLn
2
Пунктирная
DashedLn
3
Тип определяется
пользователем
UserBitLn
4
Нормальная толщина
NormWidth
1
Тройная толщина
ThickWidth
3
Цвет
(русск)
Цвет
(английск)
№ цвета
Черный
Black
0
Синий
Blue
1
Зеленый
Green
2
Голубой
Cyan
3
Красный
Red 4 Фиолетовый
Magenta
5
Коричневый
Brown
6
Светло серый
LightGray
7
Темно серый
DarkGray
8
Ярко синий
LightBlue
9
Ярко зеленый
LightGreen
10
Ярко голубой
LightCyan
11
Розовый
LightRed
12
Малиновый
LightMagenta
13
Желтый
Yellow
14
Белый
White
15
Константы типов и толщины линий
Таблица 4.13
Таблица 4.14
100
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
