Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
КНИГА_Учимся программировать TURBO PASCAL 7.doc
Скачиваний:
32
Добавлен:
19.08.2019
Размер:
1.62 Mб
Скачать

Var а, в : integer;

FUNCTION BILL(Y, X : INTEGER): INTEGER;

Var к: integer;

BEGIN

K:=YDIVX;

IF Y MOD X = 0 THEN BILL := К

ELSE

BEGIN

Y := A-X+Y MOD X;

BILL:= K+BILL(Y, X)+2

END

END;

BEGIN

REPEAT

WRITE('BBEДИTE ДВА НАТУРАЛЬНЫХ ЧИСЛА А>В');

READLN(A, В);

UNTIL A> = В;

WRITELN('KОЛИЧECTBO ОТРЕЗКОВ В ТРАЕКТОРИИ :', BILL(A, В))

END.

Для решения задачи:

- формируем тело программы и описываем переменные;

- создаем описание рекурсивной функции BILL;

- вводим два натуральных числа А и В;

- вызываем функцию BILL для определения количества от­резков;

- завершаем работу программы.

Переменные:

в функции BILL:

X, Y - два натуральных числа (формальные параметры);

К - вспомогательная переменная (локальная переменная);

А - длинная сторона стола (глобальная переменная);

в основной программе:

А, В - два натуральных числа (глобальные переменные).

ВВЕДИТЕ ДВА НАТУРАЛЬНЫХ ЧИСЛА А>В

73

КОЛИЧЕСТВО ОТРЕЗКОВ В ТРАЕКТОРИИ: 9

ВВЕДИТЕ ДВА НАТУРАЛЬНЫХ ЧИСЛА

13 7

КОЛИЧЕСТВО ОТРЕЗКОВ В ТРАЕКТОРИИ: 37

Рис. 9.4. Результат работы PG9_13

Практические задания

1. Написать процедуру, которая упорядочивает массив чисел по указанному ключу: по возрастающей или по убывающей.

2. Написать функцию, которая вычисляет количество вхождений слова "ПРИВЕТ" в текстовую строку.

3. Написать функцию, которая вычисляет количество вхождений слова "ПРИВЕТ" в текстовый файл.

Тема 10 Работа с текстом. Модуль crt

Модуль CRT представляет собой библиотеку функций и про­цедур, предназначенных для увеличения возможностей текстового ввода-вывода данных. Все описание возможностей данного модуля представлено в табл. 10.1. Для задания одного из текстовых режи­мов предназначена процедура PROCEDURE TEXTMODE (MODE : WORD );

где Mode - код текстового режима, который может принимать следующие значения:

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

- СО40 = 1 - цветной режим 40 х 25;

- BW80 = 2 - черно-белый режим 80 х 25;

- СО80 = 3 - цветной режим 80 х 25;

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

- FONT8X8 = 256 - используются для загружаемого шрифта в режиме 80 х 45 или 80 х 50 с адаптерами VGA или EGA.

Какой бы режим не был установлен, координаты верхнего ле­вого угла экрана всегда определяются как XI = 1 и Y1 = 1. При­ращение значений по оси X происходит слева направо, а по оси Y - сверху вниз (рис. 10.1). Значение координат нижнего правого уг­ла зависит от режима: либо Х2 = 40 и Y2 = 25, либо Х2 = 80 и Y2 = 25, либо Х2 = 80 и Y2 = 45, либо Х2 = 80 и Y2 = 50. Все программы, рассматриваемые в данной теме, написаны для режи­ма СО40, где МАХХ = 40, MAXY = 25.

Рис. 10.1. Размеры экрана для модуля CRT

Таблица 10.

Функция

или процедура

Назначение

KeyPressed

Определяет, была ли нажата клавиша на клавиатуре Function KeyPressed : boolean;

ReadKey

Читает значение нажатой клавиши Function ReadKey : char;

TextBackground

Определяет цвет фона Procedure TextBackground(Color : byte);

TextColor

Определяет цвет выводимых символов Procedure TextColor (Color : byte) ;

TextMode

Определяет текстовый режим Procedure TextMode (Mode : Word);

ClrScr

Очищает экран и устанавливает курсор в левый верх­ний угол экрана Procedure ClrScr;

Window

Определяет текстовое окно на экране

Procedure Window (XI, Yl, X2, Y2 : Byte);

WhereX

Возвращает значение горизонтальной координаты Function WhereX : Byte;

WhereY

Возвращает значение вертикальной координаты Function WhereY : Byte;

GotoXY

Переводит курсор в указанное место Procedure GotoXY(X, Y : Byte);

DelLine

Уничтожает всю строку с курсором Procedure DelLine;

InsLine

Вставляет строку Procedure InsLine;

ClrEol

Стирает часть строки от курсора до правой границы Procedure ClrEol;

HighVideo

Устанашшвает повышенную яркость символов Procedure HighVideo;

Norm Video

Устанавливает нормальную яркость символов Procedure NormVideo;

LowVideo

Устанашшвает пониженную яркость символов Procedure LowVideo;

AssignCrt

Связывает текстовый файл с окном CRT Procedure AssignCrt(F : Text);

Delay

Вводит задержку в миллисекундах Procedure Delay (T : Word);

Sound

Заставляет динамик звучать с нужной частотой Procedure Sound (F : Word);

NoSound

Отключает динамик Procedure NoSound;

Для того чтобы стали доступны указанные в табл. 10.1 функ­ции и процедуры, необходимо явно указать модуль CRT командой USES CRT;

С помощью процедуры TEXTBACKGROUND(COLOR : BYTE); можно устанавливать различные цвета экрана или текстового ок­на. Допустимые значения переменной Color колеблются от 0 (чер­ный цвет) до 7 (белый цвет).

Для установления цветов символов служит процедура TEXTCOLOR (COLOR : BYTE);

где значение цвета изменяется от 0 до 15, а мерцание символов устанавливается значением 128.

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

BLACK = 0

BLUE = 1

OREEN = 2

CYAN = 3

RED = 4

MAGENTA = 5

BROWN = 6

LIGHTORAY = 7

DARKGRAY = 8

UGHTBLUE = 9

LIGHTGREEN = 10

LIGHTCYAN = 11

LIGHTRED = 12

LIGHTMAGENTA = 13

YELLOW = 14

WHITE = 15

BLINK = 128

Черный

Темно-синий

Темно-зеленый

Бирюзовый

Красный

Фиолетовый

Коричневый

Светло-серый

Темно-серый

Голубой

Салатовый

Светло-бирюзовый

Розовый

Малиновый

Желтый

Белый

Мерцание символа

Процедура TEXTBACKGROUND устанавливает цвет, а CLRSCR очищает экран или текстовое окно и закрашивает его требуемым цветом. Курсор при этом перемещается в левый верх­ний угол. По умолчанию цвет экрана черный.

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

FOR I := О ТО 15 DO

BEGIN

TEXTBACKGROUND(I);

CLRSCR

END;

Если вы хотите установить текстовое окно и закрашивать его в различны цвета, то это можно сделать, обратившись к процедуре WINDOW:

WIND0W(X1, Y1, Х2, Y2);

FOR I := 1 ТО 15 DO

BEGIN

TEXTBACKGROUND(I);

CLRSCR

END;

где XI, Yl - координаты верхнего левого угла окна, Х2, Y2 - нижнего правого. Сразу после вызова процедуры WINDOW курсор помещает­ся в его левый верхний угол, а само окно заполняется цветом фона. Обратите внимание, что обращение к процедуре WINDOW игнориру­ется, если какая-либо из координат выходит за границу экрана или нарушается условие (Х2 > XI) AND (Y2 > Yl).

В модуле CRT дополнительные возможности по управлению клавиатурой реализуются функциями READKEY и KEYPRESSED.

Функция READKEY возвращает значение типа CHAR, которое извлекается из буфера клавиатуры в виде кода символа. Если бу­фер пуст, то функция будет ждать нажатия на любую клавишу. Обратите внимание: эта функция не отображает вводимые симво­лы на экране.

Следует помнить, что при использовании READKEY в буфер помещается расширенный код, т. е. для любой алфавитно-цифровой клавиши он соответствует коду вводимого символа, а при использовании функциональных клавиш <F1>, <F2>, <F10> и <Ins> генерируется двухбайтовая последовательность из #0 и кода клавиши. Кроме того, функция игнорирует нажатие <Shift>, <Ctrl>, <Alt>, <CapsLock>, <NumLock>, <ScrollLock>, <F11> и <F12>, воспринимая их только в комбинации с чем-нибудь еще.

Функция KEYPRESSED возвращает значение TRUE, если бу­фер клавиатуры не пуст, и FALSE - в противном случае.

Например, для вывода всего буфера (до 16 символов) на экран можно использовать следующую программу:

PROGRAM ONE_10;

USES CRT;