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

-6A82E~1

.PDF
Скачиваний:
0
Добавлен:
28.12.2025
Размер:
3.75 Mб
Скачать

41

нижний и верхний пределы для первой суммы, считываем введенные значения в переменные n1,m1. Для вычисления значения первой циклической суммы вызываем процедуру Sum с фактическими параметрами n1, m1, f1, S1. Затем выводим рассчитанное значение S1 в файл. Далее запрашиваем нижний и верхний пределы для второй суммы, считываем введенные значения в переменные n2, m2. Для вычисления значения второй циклической суммы вызываем процедуру Sum с фактическими параметрами n2, m2, f2, S2. Затем выводим рассчитанное значение S2 в файл. Закрываем файл. Заканчиваем программу.

Описание алгоритма и программы для задачи №2

Программа

Program Lab7_T2; {Familii}

Type Matr=array[1..9,1..9] of integer; Var i,j,k,n:integer;

r:text;

M1,M2,M3:Matr;

Procedure Vvod (Var M: Matr); Begin

For i:=1 to n do

For j:=1 to n do Read(M[i,j]); End;

Procedure Vyvod (M:Matr); Begin

For i:=1 to n do begin

For j:=1 to n do Write(r,M[i,j]:4); Writeln(r);

end;

End;

Begin

Assign(r,'res-7t2'); Rewrite(r); Writeln('n='); Readln(n); Writeln('M1=');

Vvod (M1); Writeln('M2='); Vvod (M2);

For i:=1 to n do begin For j:=1 to n do begin M3[i,j]:=0;

For k:=1 to n do M3[i,j]:=M3[i,j]+M1[i,k]*M2[k,j]; end;

end;

Writeln(r,' Matrix M1:'); Vyvod (M1);

Writeln(r,' Matrix M2:'); Vyvod (M2);

Writeln(r,' Matrix M3:'); Vyvod (M3);

Close(r);

End.

42

Для решения поставленной задачи: «Перемножить квадратные матрицы М1 и М2 размером n×n. Размер n и исходные матрицы ввести с клавиатуры. Исходные и результирующую матрицы вывести в файл,» – была написана программа Lab7_T2. В начале программы объявлены

Пользовательский тип

Matr – двумерный массив размером [1..9,1..9] элементов целого типа, предназначен для описания квадратной матрицы.

Глобальные переменные

i, j, k – целого типа, используются в качестве управляющих параметров при организации циклических процессов;

n – целого типа, хранит размер квадратных матриц;

r – файловая переменная текстового типа, предназначена для организации работы с текстовым файлом, в котором будет хранится результат работы программы;

M1, M2, M3 – типа Matr, предназначены для хранения значений элементов исходных и результирующей матриц соответственно.

Далее в программе описаны пользовательские подпрограммы.

Vvod – подпрограмма-процедура предназначена для организации ввода квадратной матрицы. Имеет

формальный выходной параметр

M– типа Matr, передает значение введенной матрицы.

Впроцедуре в циклах For по i от 1 до n и по j от 1 до n производится считывание введенных значений в M[i,j].

Vyvod – подпрограмма-процедура предназначена для организации вывода в файл квадратной матрицы. Имеет

формальный входной параметр

M– типа Matr, принимает значение выводимой матрицы.

Впроцедуре в циклах For по i от 1 до n и по j от 1 до n производится вывод в файл значений элементов матрицы M[i,j].

Вначале головной программы связываем имя файловой переменной r с именем файла на диске 'res-7t2'. Открываем файл для записи. Запрашиваем размер квадратных матриц и считываем введенное значение в переменную n. Затем запрашиваем ввести первую матрицу и вызываем процедуру Vvod с фактическим параметром M1. Далее запрашиваем ввести вторую матрицу и вызываем процедуру Vvod с фактическим параметром M2. Далее с помощью двух циклов For по i от 1 до n и по j от 1 до n инициализируем значения элементов результирующей матрицы M3[i,j]:=0 и запускаем внутренний цикл For по k от 1 до n, в котором вычисляем значения элементов результирующей матрицы с помощью циклического суммирования M3[i,j]:=M3[i,j]+M1[i,k]*M2[k,j]. Затем выводим в файл заголовок 'Матрица M1:' и вызываем процедуру Vyvod с фактическим параметром M1; выводим в файл заголовок 'Матрица M2:' и вызыва-

43

ем процедуру Vyvod с фактическим параметром M2; выводим в файл заголовок 'Матрица M3:' и вызываем процедуру Vyvod с фактическим параметром M3. Закрываем файл. Заканчиваем программу.

44

9 ИСПОЛЬЗОВАНИЕ МОДУЛЕЙ В ТУРБО-ПАСКАЛЕ. МОДУЛЬ CRT

9.1 Общие сведения

Богатство алгоритмических возможностей Турбо-Паскаля в значительной степени достигается благодаря использованию модулей, Модуль – представляет собой набор констант, типов данных, переменных, процедур и функций. Каждый модуль по своей структуре аналогичен отдельной программе. Вместе с тем структура модуля позволяет использовать его как своеобразную библиотеку описаний. Модули являются достаточно гибким и удобным средством при разработке больших программных комплексов. Кроме того использование модулей позволяет практически обойти известное для 16-разрядных ПЭВМ ограничение на размер кодового сегмента (64 Кб). Это достигается благодаря тому, что каждому модулю при выполнении программы отводится свой отдельный сегмент оперативной памяти.

Турбо-Паскаль располагает восемью стандартными (встроенными) моду-

лями. Это System, Dos, Overlay, Graph, CRT, Printer, Turbo3, Graph3. Два по-

следних модуля предназначены для поддержки совместимости программ, написанных в версии 3.0.

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

9.2Работа с экраном дисплея в текстовом режиме

Взависимости от типа используемого в компьютере адаптера всю выводимую на экран дисплея информацию подразделяют на текстовую и графическую. Соответственно выделяют текстовый и графический режимы. Текстовый режим поддерживается стандартным модулем CRT. В разделе интерфейса этого модуля определен ряд констант и переменных. Для задания режимов экрана используются следующие константы (табл. 9.1):

Таблица 9.1. Константы режимов экрана

Наименование

Значение

Размер

Цвет выводимых

Вид

константы

константы

экрана

символов

адаптера

 

 

Bw40

0

40×25

черно-белый

цветной

Со40

1

40×25

цветной

цветной

Bw80

2

80×25

черно-белый

цветной

Co80

3

80×25

цветной

цветной

Mono

7

80×25

черно-белый

монохромный

+Font8×8

+256

80×50

цветной

цветной

При задании цвета и фона выводимых на экран символов предусмотрены следующие константы (табл. 9.2):

45

Таблица 9.2. Константы цвета и фона символов

Наименование константы

Значение константы

Цвет

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

белый

Blik

+128

мерцающее изображение

 

 

 

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

Для инициализации текстового режима используется процедура TextMode(Mode:word). Выполнение этой процедуры приводит к очистке экрана и активизации указанного на месте Mode режима. Для задания соответствующего режима используется наименование констант или же их значения из табл. 8.1.

Пример:

TextMode(259) или TextMode(Co80+Font8×8) – активизирует цветной текстовый режим с размером экрана в 50 строк по 80 символов в каждой строке.

Описанные в разделе интерфейса модуля Crt стандартные процедуры и функции позволяют управлять различными параметрами при выводе символов на экран. Приведем некоторые из них:

LowVideo; – устанавливает режим минимальной яркости свечения выводимых на экран символов;

NormVideo; – устанавливает режим нормальной яркости свечения выводимых на экран символов;

HighVideo; – устанавливает режим наибольшей яркости свечения выводимых на экран символов;

TextBackGround(Color:byte); – устанавливает цвет фона, т.е.

46

цвет области, которая окружает отображаемый на экран символ. При этом Color – выражение целого типа, принимающее значение из диапазона от 0 до 7 в соответствии с табл. 8.2. В качестве Color может быть задано имя константы из этой же таблицы;

TextColor(Color:byte); – устанавливает цвет выводимых на экран символов. Здесь Color – выражение целого типа из диапазона от 0 до 15 (табл. 8.2);

Window(х1,у1,х2,у2:byte); – определяет на экране текстовое окно. После определения окна все координаты задаются относительно этого активного окна, а не полного экрана. При определении окна координаты xl, yl соответствуют верхнему левому углу, а х2,у2 – нижнему правому углу окна. Левый верхний угол текущего окна имеет относительную координату (1,1), а минимальный размер окна может включать один столбец и одну строку;

Clrscr; – очищает текущее окно и устанавливает курсор в верхний левый угол;

ClrEol; – очищает строку текущего окна от текущей позиции курсора до конца строки без изменения позиции курсора;

GotoXY(X,Y:byte); – перемещает курсор в позицию с координатами X,Y в рамках текущего окна.

9.3 Работа с экраном дисплея в текстовом режиме

Компьютеры могут комплектоваться встроенным динамиком, способным генерировать звуковые сигналы в диапазоне от 30 до 32000 Гц.

Для управления частотой звука и его продолжительностью в модуле CRT. предусмотрены следующие стандартные процедуры:

Delay(Ms:word); – выполняет задержку в выполнении программы на некоторое время;

Sound(Hz:word); – включает внутренний динамик. Hz задает частоту генерируемого динамиком сигнала в герцах. Звуковой сигнал будет звучать до тех пор, пока не будет выключен с помощью процедуры

NoSound; – отключает внутренний динамик.

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

Таблица 8.3. Значение частот различных музыкальных звуков

 

 

Первая октава

 

 

 

 

Вторая октава

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

До

Ре

Ми

Фа

Соль

Ля

Си

До

Ре

Ми

Фа

Соль

Ля

Си

 

 

 

 

 

 

 

 

 

 

 

 

 

 

523

587

659

698

783

880

998

1046

1175

1319

1397

1568

1760

1976

 

 

 

 

 

 

 

 

 

 

 

 

 

 

47

9.4 Работа с экраном дисплея в текстовом режиме

Вся клавиатура компьютера состоит из алфавитно-цифровых и функциональных клавиш. Каждая клавиша при нажатии вызывает генерацию уникального кода сканирования. Код любой алфавитно-цифровой клавиши занимает один байт. Большинство функциональных клавиш, а также комбинации клавиш имеют код длиной в два байта.

Для работы с клавиатурой в модуле CRT предусмотрены следующие функции:

KeyPressed:boolean; – возвращает значение True, если на клавиатуре была нажата какая-либо клавиша. В противном случае эта функция возвращает значение False;

ReadKey:char; – считывает символ с клавиатуры. Считываемый символ на экране не отображается. Если перед вызовом ReadKey функция KeyPressed равна True, то символы считываются немедленно. Иначе функция ReadKey ожидает нажатия клавиши. Для считывания расширенного кода (два байта) функцию ReadKey необходимо выполнить дважды.

ПРИМЕР.

Закончить работу программы при нажатии клавиши <Esc>

Uses CRT; Var kod:char; Begin

Writeln(’ Для выхода нажмите Esc ’);

Repeat kod:=readkey; until kod=#27; End.

48

10 МОДУЛЬ GRAPH

10.1 Общие сведения

Модуль Graph поддерживает графический режим работы дисплея. В этом режиме любое изображение на экране дисплея синтезируется из множества мельчайших элементов, называемых пикселями (пэлами). Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки между соседними пикселями отсутствуют. Если группа смежных пикселей находится в возбужденном состоянии (светятся), то они воспринимаются не как совокупность отдельных точек, а как сплошной участок. Таким образом, на экране дисплея может быть синтезировано любое графическое изображение.

В графическом режиме экран дисплея разделяется прямоугольной сеткой, каждый элемент которой имеет свои координаты. Левый верхний угол экрана имеет координаты (0,0), правый нижний (зависит от драйвера) – (640,480). Значение левой координаты (X) увеличивается в горизонтальном направлении слева направо. Значение правой координаты (Y) увеличивается в вертикальном направлении сверху вниз.

Графическому режиму, как и текстовому, присуще понятие текущего указателя. Текущий указатель в любой момент времени может, находиться в любой точке экрана с координатами (X,Y). Его местонахождение отображается курсором. В графическом режиме курсор невидим.

Реализация графического режима в компьютере обеспечивается благодаря наличию специальной схемы, называемой графическим адаптером. Работу графического адаптера поддерживает специальная программа, называемая драйвером. Загрузочный модуль драйвера хранится в специальном файле с расширением bgi. EGAVGA.BGI — соответствует адаптерам EGA и VGA.

Каждому типу используемого драйвера в разделе интерфейса модуля Graph соответствует своя константа. (Detect = 0; {Требуется автоматическое определение}).

При работе с процедурами и функциями модуля Graph могут возникать ошибки. Код ошибки возвращается функцией GraphResult (grOk = 0; (Ошибок нет}).

49

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

Const

 

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;

White (белый) = 15;

10.2 Инициализация графического режима и выход из него

Графический режим инициализируется с помощью стандартной процеду-

ры

InitGraph (var GraphDriver:integer, var GraphMode:integer; DriverPath:String);

При этом в переменной GraphDriver задается тип загружаемого драйвера. Значение GraphDriver выбирается из соответствующего списка констант (Detect, CGA, MCGA, EGA и т.д.) или их значений (0, 1, 2, 3 и т.д.). Если GraphDriver=0 (Detect), то при загрузке драйвера используется процедура автоматического обнаружения.

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

В переменной DriverPath задается путь к каталогу, где находится соответствующий загружаемому драйверу bgi-файл.

Ошибки, которые могут возникнуть при инициализаций графического режима, анализируют с помощью функции GraphResult. Рассмотрим пример инициализации графического режима.

uses Graph;

var Gd, Gm: integer; begin

Gd:=Detect;

InitGraph(Gd,Gni,''); {поиск драйвера осуществляется в текущем каталоге} if GraphResult <> grOk then Halt(l);

CloseGraph end.

Для выхода из графического режима используется стандартная процедура CloseGfaph. Эта процедура восстанавливает режим, существовавший до инициализации графики.

50

10.3Управление экраном и организация окон

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

SetViewPort (X1,Y1,X2,Y2:integer, Clip:boolean);

Здесь X1, Yl определяют верхний левый угол окна, а Х2, Y2 — нижний правый угол окна. Очевидно, что 0<=Х1<Х2 и 0<=Y1<Y2. После определения окна относительная координата левого верхнего угла текущего окна становится равной (0,0) и весь дальнейший вывод будет производиться в рамках относительной координатной системы текущего окна.

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

const

ClipOn = True; ClipOff = False;

Если Clip=ClipOn или Clip=True (что эквивалентно), то та часть выводимого на экран графического изображения, которая выходит за пределы текущего окна, будет отсекаться. Если Clip=ClipOff или Clip=False, то отсечение не выполняется.

Текущий указатель после выполнения SetViewPort устанавливается в точку с относительными координатами (0,0).

После инициализации графического режима (InitGraph) текущее окно устанавливается в рамках всего экрана, что эквивалентно

SetViewPort(0,0,GetMaxX,GetMaxY,True).

С помощью процедуры ClearViewPort текущее окно может быть очищено.

Текущее окно при выполнении процедуры ClearViewPort заполняется фоновым цветом, после чего текущий указатель устанавливается в точку с относительными координатами (0,0).

10.4Вывод текстовой информации

Вграфическом режиме вывод текстовой информации осуществляется с помощью штриховых и побитовых шрифтов. Каждый символ в штриховом шрифте определен серией отрезков, что позволяет использовать любой коэффициент увеличения символов без ухудшения качества изображения. Побитовый шрифт определен матрицей 8×8 пикселей для каждого символа. Для увеличения побитового шрифта используется коэффициент масштабирования, однако большое увеличение побитового шрифта делает изображение грубым.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]