Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Решение задач на ЭВМ. Программирование на языке Pascal. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
08.09.2026
Размер:
2 Мб
Скачать
☆
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
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]