* Данная работа не является научным трудом, не является выпускной квалификационной работой и представляет собой результат обработки, структурирования и форматирования собранной информации, предназначенной для использования в качестве источника материала при самостоятельной подготовки учебных работ.
36
МИНИСТЕРСТВО ПРОСВЕЩЕНИЯ ПМР
Приднестровский Государственный Университет
им. Т.Г.Шевченко
физико-математический факультет
кафедра информатики и вычислительной техники
36
тема: «Операции над матрицами»
Выполнила
студентка 305 гр.
Савкина А.П.
Научный
руководитель
Преподаватель кафедры ИВТ
Земляков А.В.
г. Тирасполь
2004 г.
Содержание
1 . Введение ……………………………………………………………………3
2. Теоретическая часть
2.1 Матрицы
Понятие матрицы…………………………………………………...4
2.2 Основные операции над матрицами
Сложение матриц……………………………………………….......4
Вычитание матриц………………………………………………….4
Умножение матрицы на число…………………………………….5
Перемножение матриц……………………………………………..6
Транспонирование матрицы……………………………………….7
2.3 TURBO Pascal
Константы и переменные………………………………………….8
Общий вид программы в TP 7……………………………………..9
2.4 Операторы TP 7
Оператор присваивания…………………………………………...10
Условный оператор………………………………………………..11
Оператор выбора………………………………………………….12
2.5 Циклы
С предусловием ( While … do )……………………………………..13
С постусловием ( Repeat … Until )………………………………….14
С параметром ( For … to )…………………………………………...15
2.6 Массивы……………………………………………………………..16
2.7 Работа в текстовом режиме………………………………………...17
2.8 Процедуры и функции пользователя………………………………19
2.9 Коды клавиатуры……………………………………………………
3. Программа …………………………………………………………………
4. Заключение ………………………………………………………………..
5. Список литературы ……………………………………………………...
1.Введение
Впервые в математике такое понятие как матрица появилось в середине 19 века в работах Гамильтона, Сильвестра. Современное обозначение – две вертикальные черточки – ввел А. Кэли (1841).
Матричный язык, обозначения и матричные вычисления широко используются в различных областях современной математики и её приложений. Матрицы являются основным математическим аппаратом линейной алгебры, используются в математическом анализе при интегрировании систем дифференциальных уравнений.
В математике матрицей называется прямоугольная таблица из чисел, содержащая некоторое количество m строк и некоторое количество n столбцов. Числа m и n называются порядками матрицы. В случае, если m = n , матрица называется квадратной, а число m = n -- ее порядком .
Матрицы также нашли своё применение в программировании. Они широко используются старшеклассниками с углубленным изучением математики на практических занятиях, студентами для закрепления темы “Двумерные массивы” и т.д. Современные средства вычислительной техники и ЭВМ позволяют существенным образом повысить эффективность деятельности инженеров при решении различных задач. При этом наиболее существенным вопросом является организация взаимодействия пользователя со средствами ЭВМ. В качестве языка программирования выбран язык программирования Турбо Паскаль. К достоинствам языка Турбо Паскаль следует отнести такие его характеристики, как универсальность, наглядность, удобство работы с массивами.
Цель работы - разработать программу для проведения основных операций над матрицами: транспонирование матрицы, сложение двух матриц, умножение матрицы на число, перемножение двух матриц.
В моей работе сформулированы основные понятия теории матриц. Элементы матриц вводятся с клавиатуры, на экран выводится информация о том, какие матрицы обрабатываются и результат обработки . Программа рациональна и легко читаема, в ней вставлены комментарии для объяснения работы отдельных блоков программы. Программа предусматривает выход из неё.
В программе используются процедуры и функции; циклы с постусловием, предусловием, с параметром; массивы; условный оператор, оператор выбора, присваивания; работа в текстовом режиме.
2. Теоретическая часть
2.1Матрицы.
Понятие матрицы.
Матрицей называется прямоугольная таблица из чисел, содержащая некоторое количество m строк и некоторое количество n столбцов. Числа m и n называются порядками матрицы. В случае, если m = n , матрица называется квадратной, а число m = n -- ее порядком .
2.2 Основные операции над матрицами .
Основными арифметическими операциями над матрицами являются умножение матрицы на число, сложение и умножение матриц.
Прежде всего, договоримся считать матрицы равными, если эти матрицы имеют одинаковые порядки и все их соответствующие элементы совпадают.
Перейдем к определению основных операций над матрицами.
Сложение матриц :
Суммой двух матриц, например: A и B , имеющих одинаковое количество строк и столбцов, иными словами, одних и тех же порядков m и n называется матрица С=( С ij ) ( i = 1, 2, … m ; j = 1, 2, … n ) тех же порядков m и n , элементы Cij которой равны.
Cij = Aij + Bij ( i = 1, 2, …, m; j = 1, 2, …, n ) ( 1 )
Для обозначения суммы двух матриц используется запись C = A + B . Операция составления суммы матриц называется их сложением
Итак по определению имеем :
=
=
Пример: + =
Из определения суммы матриц, а точнее из формулы ( 1 ) непосредственно вытекает, что операция сложения матриц обладает теми же свойствами, что и операция сложения вещественных чисел, а именно :
1) переместительным свойством : A + B = B + A
2) сочетательным свойством : ( A + B ) + C = A + ( B + C )
Эти свойства позволяют не заботиться о порядке следования слагаемых матриц при сложении двух или большего числа матриц.
Разностью двух матриц A и B одинаковых порядков естественно называется такая матрица C тех же порядков, которая в сумме с матрицей B дает матрицу A . Для обозначения разности двух матриц используется естественная запись : C = A – B .
Пример: - =
Умножение матрицы на число :
Произведением матрицы A = ( Aij ) ( i = 1, 2, …, m ; j = 1, 2, …, n ) на вещественное число называется матрица C = ( Cij ) ( i = 1, 2, … , m ; j = 1, 2, …, n ), элементы которой равны
Cij = Aij ( i = 1, 2, …, m; j = 1, 2, …, n ). ( 2 )
Для обозначения произведения матрицы на число используется запись C = A или C = A . Операция составления произведения матрицы на число называется умножением матрицы на это число.
Непосредственно из формулы ( 2 ) ясно, что умножение матрицы на число обладает следующими свойствами :
1) распределительным свойством относительно суммы матриц:
( A + B) = A + B
2) сочетательным свойством относительно числового множителя:
( ) A = ( A)
3) распределительным свойством относительно суммы чисел :
( + ) A = A + A.
* k =
Пример : * 6 =
Перемножение матриц :
Произведением матрицы A = ( Aij ) ( i = 1, 2, …, m ; j = 1, 2, …, n ), имеющей порядки соответственно равные m и n , на матрицу B = ( Bij ) ( i = 1, 2, …, n ; j = 1, 2, …, p ), имеющую порядки соответственно равные n и p , называется матрица C = (С ij ) ( i = 1, 2, … , m ; j = 1, 2, … , p ), имеющая порядки, соответственно равные m и p , и элементы Cij , определяемые формулой
Cij = ( i = 1, 2, …, m ; j = 1, 2, …, p ) ( 3 )
Для обозначения произведения матрицы A на матрицу B используют запись C = AB . Операция составления произведения матрицы A на матрицу B называется перемножением этих матриц. Из сформулированного выше определения вытекает, что матрицу A можно умножить не на всякую матрицу B : необходимо чтобы число столбцов матрицы A было равно числу строк матрицы B . Для того чтобы оба произведения AB и BA не только были определены, но и имели одинаковый порядок, необходимо и достаточно, чтобы обе матрицы A и B были квадратными матрицами одного и того же порядка.
Формула ( 3 ) представляет собой правило составления элементов матрицы C ,
являющейся произведением матрицы A на матрицу B . Это правило можно сформулировать и словесно : Элемент Cij , стоящий на пересечении i -й строки и j -го столбца матрицы C = AB , равен сумме попарных произведений соответствующих элементов i -й строки матрицы A и j -го столбца матрицы B . В качестве примера применения указанного правила приведем формулу перемножения квадратных матриц второго порядка
* =
Из формулы ( 3 ) вытекают следующие свойства произведения матрицы A на матрицу B :
1) сочетательное свойство : ( AB ) C = A ( BC );
2) распределительное относительно суммы матриц свойство :
(A + B) C = AC + BC или A (B + C) = AB + AC.
Вопрос о перестановочном свойстве произведения матриц имеет смысл ставить лишь для квадратных матриц одинакового порядка. Элементарные примеры показывают, что произведение двух квадратных матриц одинакового порядка не обладает, вообще говоря, перестановочным свойством . В самом деле, если положить
A = , B = , то AB = , а BA =
Те же матрицы, для произведения которых справедливо перестанавочное свойство, принято называть коммутирующими .
Транспонирование матриц.
Если в матрице А поменять местами столбцы со строками, то получим транспонированную матрицу А Т . Каждый элемент транспонированной матрицы определяется по формуле:
a ij T = a ji , i =1,2,..., n ; j =1,2,..., m .
Пример транспонирования: =
Транспонирование матрицы можно реализовать двумя способами.
Первый способ следует применять, когда имя транспонированной матрицы не совпадает с именем исходной матрицы, т.е. когда исходная и транспонированная матрицы хранятся в разных областях памяти ЭВМ.
Второй способ следует применять, когда транспонирование требуется выполнить в той же области памяти, где располагается исходная матрица, т.е. когда транспонированная матрица должна иметь такое же имя, как и исходная (например, для экономии памяти). В этом случае для перестановки элементов необходимо организовать циклический процесс не в полном объёме, как это делается при первом способе, а в половинном, так как в противном случае каждый элемент будет переставлен дважды и, следовательно, исходная матрица останется без изменений.
2.3 Turbo Pascal
Константы и переменные.
В программе каждый элемент данных является константой или переменной. Константы и переменные определяются именами, к которым затем можно обратиться.
Константой называется элемент данных, значения которых установлено в описательной части программы и в процессе выполнения программы не изменяется.
Для определения значения констант существует зарезервированное слово Const .
Формат 1 1 Формат – это правило записи команд записи:
Const
<идентификатор>=<значение константы>;
Например:
Const Pi =3.1415;
Переменной называется элемент данных, идентификатор которых указывается в описательной части программы, и значения которых, в процессе выполнения программы, могут изменяться.
Для описания переменных используется зарезервированное слово Var .
Формат записи:
Var
<идентификатор> : <тип переменной>;
Например :
Var A:integer;
D,f,k:real;
My _ Program : char ;
После описания переменной её значение принимает значение равное нулю.
Каждая переменная или константа должны принадлежать определённому типу данных.
Комментарии в ТР 7.
В ТР7 в качестве комментариев используется пара символов:
Между этими скобками можно заключить любую последовательность символов, которая будет игнорироваться при выполнении программы.
Комментарий можно вставлять в любом месте программы. Где по синтаксису языка допускается пробел.
Примеры комментариев:
Это комментарий Моя первая программа
Общий вид программы в ТР7.
Программа – это последовательность команд для ввода исходных данных, их обработки и выдачи результатов для реализации алгоритма задачи.
Программа реализует некоторый алгоритм решения конкретной задачи. Она объединяет последовательность действий с помощью определённых описаний.
В общем случае программа на ТР7 выглядит следующим образом:
Program <имя программы>; указывается имя программы
Uses <имя 1,имя 2,…>; раздел стандартных модулей подключаемых
к программе
Label <метка 1,метка 2,…>; раздел описания меток
Const <имя>=<значение>; раздел описания констант
Type< имя типа >=< значение типа > ; раздел описания типов
Var <идентификатор>,…,<идентификатор>:<тип>; раздел описания
переменных
Procedure <имя процедуры>; раздел описания процедур
<тело процедуры>
Function <имя функции>; раздел описания функций
<тело функции>
Begin
… основное тело программы
End .
Основное тело программы 1 1 Телом программы называется место в программе, где располагаются все основные команды программы. помещается между зарезервированными словами begin … end . Данные слова называются операторными скобками .
2.4 Операторы ТР7.
Оператор – это способ задания некоторого действия для его исполнения.
Любой оператор в ТР7 должен заканчиваться точкой с запятой.
Другими словами можно сказать, что оператор – это выражение заканчивающиеся точкой с запятой.
; - это терминатор – признак конца.
Операторы ввода-вывода .
В любой, даже самой простой, программе присутствуют одни из часто используемых операторов ТР7: операторы ввода – вывода.
Ввод – это передача данных от внешнего пользователя в оперативную память компьютера для обработки . Самым распространённым устройством ввода является клавиатура.
Вывод – это обратный процесс, когда данные после обработки выводятся пользователю. Самым распространённым устройством вывода является дисплей монитора и принтер.
В ТР7 для осуществления ввода – вывода существуют четыре специальных оператора-процедуры:
Для ввода:
Read (от английского слова - читать)
Readln ( Read Line – читать линию, строку)
Для вывода:
Write (от английского слова – писать, записать)
Writeln ( Write Line – записать линию, строку)
Оператор присваивания.
В ТР7 в качестве оператора присваивания служит пара символов :=.
Формат оператора:
<идентификатор>:=<выражение>;
В качестве выражения в ТР7 может быть использовано:
<идентификатор>:=<числовая константа>;
<идентификатор>:=<символьная константа>;
<идентификатор>:=<строковая константа>;
<идентификатор>:=<числовая переменная>;
<идентификатор>:=<символьная переменная>;
<идентификатор>:=<строковая переменная>;
<идентификатор>:=<арифметическое выражение>;
Принцип действия оператора присваивания:
Идентификатору стоящему слева от знака присваивания присваивается значение специального выражения стоящего справа от знака присваивания.
Обратите внимание, что сначала вычисляется специальное выражение стоящие справа от знака присваивания, а затем, значение этого выражения присваивается идентификатору стоящему слева от знака присваивания.
Составной оператор – это последовательность произвольных операторов программы, заключённая в операторные скобки Begin … End .
Формат составного оператора:
Begin
<оператор 1>;
<оператор 2>;
<оператор 3>;
…
…
<оператор N >;
End .
Условный оператор.
Условный оператор используется для составления разветвляющихся программ .
Разветвляющаяся программа – это программа, содержащая хотя бы одно логическое условие, в соответствии с которым будет выполнятся то или иное действие.
Условный оператор существует в двух формах записи: полной и сокращённой.
Полная форма записи: да нет
IF <условие>
THEN
<оператор 1>
ELSE
<оператор 2>;
Служебные слова IF , THEN , ELSE означают соответственно: ЕСЛИ , ТО , ИНАЧЕ .
Принцип работы полного условного оператора : если условие стоящие после зарезервированного слова IF истинно, то выполняется оператор 1 , стоящий после зарезервированного слова THEN , а иначе, если условие оказывается ложным, то выполняется оператор 2 стоящий после зарезервированного слова E LSE .
Следует обратить внимание, что перед словом ELSE « ; » не ставится!
Сокращённая форма записи:
IF <условие> да нет
THEN
<оператор >;
Оператор выбора.
Для ситуаций, где имеется несколько (три и более) альтернатив, вместо условного оператора больше подходит оператор выбора .
Общая форма записи:
case <выражение-селектор> of
<список значений 1> : <оператор 1> ;
<список значений 2> : <оператор 2> ;
………………………… : ………………… ;
<список значений N > : <оператор N > ;
else <оператор> ;
end ;
Принцип работы оператора выбора: при
выполнении данного оператора вначале
вычисляется значение выражения-селектора
стоящего после зарезервированного слова case .
Затем выбирается тот список значений ,
которому принадлежит полученное
значение, и выполняется соответствующий
оператор , следующий за двоеточием .
Оператор стоящий после зарезервированного
слова else выполняется если ни один из списков
значений не удовлетворил значению
выражения-селектора и может отсутствовать .
В списках значений допустимыми являются
скалярные типы переменных, которые включают целые и исключают вещественные типы. Любое заданное значение выражения-селектора может входить в список значений неоднократно, но выполнятся будет лишь первая подходящая ветвь.
2.5 Циклы
Цикл – это последовательность операторов, которая может выполняться более одного раза.
Операторы повтора в ТР7 представлены следующими циклами:
1. Циклом с предусловием;
2. Циклом с постусловием;
3. Циклом с параметром;
Цикл с предусловием
Общий форма записи цикла While … do
While <условие> do
begin
<серия операторов> ;
end ;
Указанную серию операторов называют телом цикла .
Принцип действия цикла While :
Вначале проверяется условие стоящие после слова While . Если оно соблюдается (т.е. истинное), то выполняется тело цикла (слово do – означает делать, выполнять) заключённое в операторные скобки begin … end ; а затем происходит перепроверка условия. Если оно опять будет соблюдается, то тело цикла выполнится ещё раз. Этот процесс будет продолжаться до тех пор, пока условие будет соблюдаться. Как только условие перестанет соблюдаться (т.е. станет ложным), цикл завершит свою работу.
Условие в цикле While проверяется только перед выполнением цикла, но не проверяется в процессе выполнения самого тела цикла.
Если поставленное условие не соблюдается с самого начала, то тело цикла не выполнится ни разу.
Выполнение цикла пока может и не завершиться, если условие будет всё время соблюдаться (говорят, что происходит зацикливание ).
Цикл с постусловием ( Repeat … Until ):
Иногда, приходится сталкиваться с такими задачами, когда нужно, чтобы выполнилось какое-либо действие, а потом проверилось условие повторения этого действия. Для этого служит цикл Repeat … Until .
Общий форма записи цикла Repeat…Until
Repeat
<тело цикла> ;
Unil <условие> ;
Принцип действия цикла Repeat … Until :
Вначале выполняется тело цикла следующие после слова Repeat ( повторять ). Когда компилятор доходит до слова Until ( до ) происходит проверка поставленного условия. Если оно не соблюдается (т.е. оно ложное), то тело цикла выполняется ещё раз. Как только условие станет соблюдаться (т.е. будет истинным) цикл Repeat … Until завершит свою работу.
Для цикла Repeat … Until характерны 4 особенности:
1. Тело цикла выполняется, по крайней мере, один раз.
2. Тело цикла выполняется пока условие ложное.
3. В теле цикла может находиться произвольное количество операторов без операторных скобок begin … end .
4. Один из операторов тела цикла должен влиять на значение условия, иначе цикл будет бесконечным.
Цикл с параметром ( For )
Циклы While … do и Repeat … Until используются в основном тогда, когда нам заранее не известно общее количество шагов цикла.
Если же нам заранее известно количество шагов цикла, то удобнее использовать другой цикл, который называется цикл с параметром .
Общий вид цикла For … to
For <параметр цикла> := <начальное значение> to <конечное значение> do
<тело цикла>;
Принцип действия цикла For … to :
В качестве параметра цикла объявляется какая-либо переменная, которой присваивается какое-либо начальное значение . Затем выполняется тело цикла и происходит увеличение параметра цикла на единицу . Цикл будет выполняться до тех пор, пока переменная, объявленная в качестве параметра цикла , не достигнет конечного значения (начальное значение должно быть меньше конечного значения).
Слова For , to , do – означают: для, до, делать .
В качестве тела цикла может быть как простой, так и составной оператор.
Существует ещё одна форма записи цикла с параметром:
For <параметр цикла> := <начальное значение> downto <конечное значение> do
<тело цикла>;
Принцип действия цикла For … downto :
В качестве параметра цикла объявляется какая-либо переменная, которой присваивается какое-либо начальное значение . Затем выполняется тело цикла и происходит уменьшение параметра цикла на единицу . Цикл будет выполняться до тех пор, пока переменная, объявленная в качестве параметра цикла , не достигнет конечного значения (начальное значение должно быть больше конечного значения).
2.6 Массивы
Массив – это упорядоченная последовательность из фиксированного числа однотипных элементов, которая обозначается одним именем.
Упорядоченность элементов заключается в том, что все эти элементы располагаются в последовательных ячейках оперативной памяти.
В программировании различают следующие типы массивов:
1) Одномерные массивы (линейные таблицы);
2) Двумерные массивы (прямоугольные таблицы);
3) Многомерные массивы (трехмерные и т.д. таблицы).
Для того, чтобы обратиться к нужному элементу массива необходимо указать имя массива и его индекс. Индекс – это порядковый номер элемента в массиве.
Т.е. обращение происходит по правилу:
идентификатор_массива[индекс]
Общее количество элементов в массиве называется размерностью массива.
Прежде Чем в программе использовать массив или его элементы этот массив нужно, как и любую переменную, описать. Для описания массива в Паскале использую два метода:
1. с описанием пользовательского типа:
type
идентификатор_типа= array [размерность] of базовый_тип_элементов;
var
идентификатор_массива:идентификатор_типа;
2. без описания пользовательского типа:
var
идентификатор_массива: array [размерность] of базовый_тип_элементов
2.7 Работа в текстовом режиме
Основным устройством вывода информации является монитор. Он может выводить алфавитно-цифровую и графическую информацию. В текстовом режиме работы монитора минимальным объектом, отображаемом на экране является символ (алфавитно-цифровой или какой-либо другой). В обычных условиях экран монитора, работающий в текстовом режиме может содержать по горизонтали 80 символов и 25 символов по вертикали.
Следует учитывать, что координатная сетка в текстовом (да и в графическом) режиме имеет немного иное расположение, чем декартовая система координат. Точка О(0,0) находится в левом верхнем углу. Ось абсцисс направлена вправо от этой точки, а ось ординат вниз.
Для использования всех процедур работы в текстовом режиме необходимо подключить стандартный модуль (библиотеку) текстового режима Crt .
Для подключения этого модуля в разделе описания модулей (до раздела описания переменных) необходимо вставить строку: Uses Crt ;
Познакомимся с основными процедурами, которые используются при работе в текстовом режиме:
1. Процедура ClrScr ; – производит очистку экрана;
2. Процедура GotoXY ( x , y : integer ); - устанавливает курсор в позицию, определяемую координатами x и y .
3. Процедура Textcolor ( Color : byte ); - устанавливает цвет выводимых символов.
4. Процедура TextBackground ( Color : byte ); - устанавливает цвет фона.
Встроенные константы Турбо Паскаля, обозначающие цвета, и соответствующие им коды
Цвет Константа Код Черный 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 Мигающий Черный Black+Blink 16 Мигающий Синий Blue+Blink 17 Мигающий Зеленый Green+Blink 18 Мигающий Бирюзовый Cyan+Blink 19 Мигающий Красный Red+Blink 20 Мигающий Розовый Magenta+Blink 21 Мигающий Коричневый Brown+Blink 22 Мигающий Светло-серый LightGray+Blink 23 Мигающий Темно-серый DarkGray+Blink 24 Мигающий Светло-синий LightBlue+Blink 25 Мигающий Светло-зеленый LightGreen+Blink 26 Мигающий Светло-бирюзовый LightCyan+Blink 27 Мигающий Светло-красный LightRed+Blink 28 Мигающий Светло-розовый LightMagenta+Blink 29 Мигающий Желтый Yellow+Blink 30 Мигающий Белый White+Blink 31
5. Процедура Delay ( MS : Word ); - приостанавливает выполнение программы на указанное количество миллисекунд.
2.8 Процедуры и функции пользователя
Если в программе возникает необходимость частого обращения к некоторой группе операторов, выполняющих действия или вычисляющих значение какого-либо выражения, то рационально сгруппировать такую группу операторов в самостоятельный блок, к которому можно обращаться, указывая его имя. Такие разработанные программистом самостоятельные программные блоки называются подпрограммами пользователя. Они являются основой модульного программирования.
При вызове подпрограммы (процедуры или функции), определенной программистом, работа главной программы на некоторое время приостанавливается и начинает выполняться вызванная подпрограмма. Она обрабатывает данные, переданные ей из главной программы. По завершении выполнения подпрограмма-функция во звращает главной программе результат (подпрограмма-процедура не возвращает явно результирующего значения).
Передача данных из главной программы в подпрограмму и возврат результата выполнения функции осуществляются с помощью параметров.
Параметром называется переменная, которой присваивается некоторое значение в рамках указанного применения. Различают формальные параметры — параметры, определенные в заголовке подпрограммы, и фактические параметры — выражения, задающие конкретные значения при обращении к подпрограмме. При обращении к подпрограмме ее формальные параметры замещаются фактическими, переданными из главной программы.
Описание процедуры включает заголовок (имя) и тело процедуры. Заголовок состоит из зарезервированного слова procedure , идентификатора (имени) процедуры и необязательного, заключенного в круглые скобки, списка формальных параметров с указанием типа каждого параметра. Имя процедуры — идентификатор, уникальный в пределах программы. Тело процедуры представляет собой локальный блок, по структуре аналогичный программе.
Заголовок функции:
Описания меток, констант, типов и т. д. действительны только в пределах данной процедуры. В теле процедуры можно использовать любые глобальные константы и переменные.
procedure <имя> (Формальные параметры); const ...; type
var ...; begin
<операторы> end ;
Процедура не может выполниться сама, ее необходимо вызвать по имени и указать фактические параметры того же типа, что и формальные. Количество и тип формальных параметров равны количеству и типу фактических параметров.
Функции
Функция, определенная пользователем, состоит из заголовка и тела функции. Заголовок содержит зарезервированное слово function , идентификатор (имя) функции заключенный в круглые скобки, необязательный список формальных параметров и тип возвращаемого функцией значения. Тело функции представляет собой уникальный блок, по структуре аналогичный программе:
function <имя> (Формальные параметры) : <тип результата>;
const ...;
type
var ...;
begin
< операторы > end;
В разделе операторов должен находиться, по крайней мере, один оператор, присваивающий имени функции значение. В точку вызова возвращается результат последнего присваивания.
Обращение к функции осуществляется по имени с необязательным указанием списка аргументов. Каждый аргумент должен соответствовать формальным параметрам, указанным в заголовке, и иметь тот же тип.
Механизм передачи параметров
Как было сказано выше, в заголовке процедуры или функции может быть задан список параметров, которые называются формальными. Название "формальные" эти параметры получили в связи с тем, что в этом списке заданы только имена для обозначения исходных данных и результатов работы процедуры, а при вызове подпрограммы на их место будут подставлены конкретные значения (выражений) и имен. Этот список указывается после имени подпрограммы и заключается в круглые скобки.
Список формальных параметров, указываемых в заголовке подпрограммы, может включать в себя:
• параметры-значения;
• параметры-переменные, перед которыми должно стоять служебное слово var и за которыми указывается их тип;
• параметры-процедуры, перед которыми должно стоять служебное слово procedure ;
• параметры-функции, перед которыми должно стоять служебное слово function и после которых указывается тип значения, возвращаемого функцией в основную программу;
• нетипизированные параметры, перед которыми должно стоять служебное слово var и отсутствует указание типа.
В списке должны быть перечислены имена формальных параметров и их типы. Имя параметра отделяется от типа двоеточием, а параметры друг от друга — точкой с запятой. Имена параметров одного типа можно объединять в подсписки, в которых имена отделяются друг от друга запятой.
2.9 Коды клавиатуры
Коды опроса клавиатуры — это стандартные коды персонального компьютера, генерируемые микропроцессором клавиатуры при нажатии какой-либо клавиши. Этот код является входным для системы Турбо Паскаль.
При возвращении расширенных кодов в качестве первого знака возвращается нулевой байт, а второй знак соответствует нажатой клавише или комбинации клавиш. В таблицах приведено соответствие второго возвращаемого кода нажатым клавишам.
Расширенные коды клавиатуры
Код Значение Код Значение 16 — 25 Alt-Q/W/E/R/T/Y/U/I/O/P 114 Ctrl - PrtScr 30 — 38 Alt-A/S/D/F/G/H/I/J/K/L 115 Ctrl - LeftArrow(CTpenKa влево) 44 — 50 Alt-Z/X/C/V/B/N/M 116 Ctrl - RightArrow(CTpenKa вправо) 59 — 68 F1-F10 117 Ctrl-End 71 Home (Исходная позиция) 118 Ctrl-PgUp 72 UpArrow (Стрелка вверх) 119 Ctrl-Home 73 PgUp (Страница вверх) 120— 131 Alt-1/2/3/4/5/6/7/8/9/0/ — /= 75 LeftArrow(CrpenKa влево) 132 Ctrl-PgDn 77 RightArrow (Стрелка вправо) 133 Fll 79 End (Конец) 134 F12 80 DownArrow (Стрелка вниз) 135 Shift-Fll 81 PgDn (Страница вниз) 136 Shift-Fl 2 82 Ins (Вставка) 137 Ctrl-Fll 83 Del (Удаление) 138 Ctrl-F12 84 — 93 Fl 1-F20 (Shift-Fl no Shift-FlO) 139 Alt-Fl 1 94— 103 F21-F30(Ctrl-Fl noCtrl-F10) 140 Alt-Fl 2 104— 113 F3 1-F40 (Alt-Fl no Alt-FlO)
Коды опроса клавиатуры
Клавиша в шестнадцатеричном виде Код опроса Клавиша в шестнадцатеричном виде Код опроса Esc 01 Q 10 П 02 W 11 @2 03 Е 12 #3 04 R 13 $4 05 Т 14 %5 06 Y 15 Л 6 07 и 16 &7 08 I 17 *8 09 О 18 (9 ОА р 19 )0 0В [ 1А
Клавиша в шестнадцатеричном виде Код опроса Клавиша в шестнадцатеричном виде Код опроса ОС ] IB += oi> Enter 1C BS| OE м 2B CTRL ID Z 2C А IE X 2D S IF ^ 2E D 20 V 2F F 21 в 30 G 22 N 31 Н 23 М 32 J 24 < ! 33 К 25 > 34 L 26 ?/ 35 27 RightShift 36 ,.. 28 Prtscr 37 — ' 29 Alt 38 Л. Shift 2A Home 47 Space 39 Up Arrow 48 CapsLock ЗА PgUp 49 Fl 3B — 4A F2 3C LeftArrow 4B F3 3D 5 4C F4 3E RightArrow 4D F5 . 3F + 4E F6 40 End 4F F7 41 DownArrow 50 F8 42 PgUp 51 F9 43 Ins 52 F10 44 Del 53 Fll D9 NumLock 45 F12 DA ScrollLock 46 Tab OF
Функция KeyPressed
function KeyPressed: Boolean;
( Защищенный режим, реальный режим )
Назначение: Возвращает значение True , если на клавиатуре нажата клавиша и False в противном случае. Символ (или символы) остаются в буфере клавиатуры. Данная процедура не распознает клавиш перевода регистра, таких, как Shift , Alt , NumLock и т.д. Клавишу можно считать с помощью функции ReadKey .
Функция ReadKey
function ReadKey: Char;
( Защищенный режим, реальный режим ) Назначение: Считывает символ с клавиатуры.
Считываемый символ не отображается на экране. Если пе ред обращением к функции ReadKey функция KeyPressed имела значение True , то символ считывается немедленно, в противном случае функция ожидает нажатия клавиши.
3. Листинг программы
Program Kyrsac;
Uses crt;
Const
Nmax=10;
Type Matrix=array [1..Nmax, 1..Nmax] of integer; label 1;
Var A,B,C:matrix; key,ch:char; i,f,g,e,r,j,z,s: integer; p:string;
Процедура ввода элементов массива
Параметры: z-размер массива, A-массив
Procedure Vvod (z:integer; Var A:matrix);
Var i,j:integer;
Begin
For i:=1 to z do
For j:=1 to z do
Begin
Write ('[',i,',',j,']=');
Read (A[i,j]);
End;
For i:=1 to z do
Begin
For j:=1 to z do
Write (A[i,j]:5);
Writeln;
End
End;
Процедура вывода элементов массива
Параметры: z-размер массива, A-массив
Procedure Vivod(z:integer; A:matrix);
Var i,j:byte;
Begin
For i:=1 to z do
Begin
For j:=1 to z do
Write(A[i,j]:5);
Writeln
End
End;
Процедура умножения 2-х матриц
Параметры: z-размер массива, A,B-исходный массив, C-массив результат
Procedure Ymn(A,B:matrix; z:integer; Var C:matrix);
Var i,j,k,s:integer;
Begin
For i:=1 to z do
For j:=1 to z do
Begin
s:=0;
For k:=1 to z do
s:=s+A[i,k]*B[k,j]; C[i,j]:=s;
End
End;
Процедура транспонирования
Параметры: z-размер массива, A-исходный массив, C-массив результат
Procedure Tran(A:matrix; z:integer; Var c:matrix);
Var i,j:integer;
Begin
For i:=1 to z do
For j:=1 to z do c[i,j]:=A[j,i];
End;
Процедура умножения массива на скаляр
Параметры: z-размер массива, s-скаяр A-исходный массив, C-массив результат
Procedure Skal(A:matrix; z,s:integer; Var c:matrix);
Var i,j:integer;
Begin
For i:=1 to z do
For j:=1 to z do c[i,j]:=A[i,j]*s;
End;
Процедура вычитания 2-х матриц
Параметры: z-размер массива, A,B-исходный массив, C-массив результат
Procedure Vic(A,B:matrix; z:integer; Var C:matrix);
Var i,j:integer;
Begin
For i:=1 to z do
For j:=1 to z do
C[i,j]:=A[i,j]-B[i,j];
End;
Процедура сложения 2-х матриц
Параметры: z-размер массива, A,B-исходный массив, C-массив результат
Procedure slog(A,B:matrix; z:integer; Var C:matrix);
Var i,j:integer;
Begin
For i:=1 to z do
For j:=1 to z do
C[i,j]:=A[i,j]+B[i,j];
End;
Тело программы
Begin clrscr ;
while keypressed do Очстка буфера клавиатуры
key:=readkey;
asm
mov ah,01; [ Вставка из ASEMBLER
mov cx,$2000; для невидимого курсора
int $10;
end;
f:=38; Начальные координаты для рисования звездочек
g:=42;
for j:=1 to 12 do
begin
for i:=1 to 3 do
begin
gotoxy(f+i,j);
textcolor(3);
write('*');
delay(1000);
gotoxy(g-i,j);
write('*');
delay(1000);
end;
f:=f+i;
g:=g-i;
end;
f:=75; Начальные координаты для рисования звездочек в обратном порядке
g:=5;
for j:=12 to 23 do
begin
for i:=1 to 3 do
begin
gotoxy(f-i,j);
write('*');
delay(1000);
gotoxy(g+i,j);
write('*');
delay(1000);
end;
f:=f-i;
g:=g+i;
end;
textcolor(5);
gotoxy(20,12);
writeln('О П Е Р А Ц И И Н А Д М А Т Р И Ц А М И'); Вывод на экран строки с кординатами 20 12 розовым цветом
p:='Нажмите любую клавишу';
for j :=1 to length ( p ) do Вывод строки р поэлементно
for i:=25 downto 24 do
begin
gotoxy(29+j,i);
textcolor(2);
write(p[j]);
delay(5000);
gotoxy(29+j,i);
textcolor(0);
write(p[j]);
if i=24 then
begin
gotoxy(29+j,i);
textcolor(2);
write(p[j]);
end;
end;
gotoxy(30,24);
textcolor(18);
write(p);
key:=readkey; Считывание нажатой клавиши
clrscr;
for i:=1 to 10 do Вывод МЕНЮ построчно
begin
gotoxy(37,i);
textcolor(13);
write(' М Е Н Ю ');
delay(5000);
gotoxy(37,i);
textcolor(0);
write(' М Е Н Ю ');
if i=10 then
begin
gotoxy(37,i);
textcolor(13);
write(' М Е Н Ю ');
end;
end;
for i:=1 to 35 do Ввывод 1. Сложение бегущей строкой
begin
gotoxy(i,12);
textcolor(2);
write('1. Сложение ');
delay(5000);
gotoxy(i,12);
textcolor(0);
write('1. Сложение ');
if i=35 then
begin
gotoxy(i,12);
textcolor(2);
write('1. Сложение ');
end;
end;
for i:=68 downto 35 do Ввывод 2. Вычитание бегущей строкой
begin
gotoxy(i,13);
textcolor(2);
write('2. Вычитание ');
delay(5000);
gotoxy(i,13);
textcolor(0);
write('2. Вычитание ');
if i=35 then
begin
gotoxy(i,13);
textcolor(2);
write('2. Вычитание ');
end;
end;
for i:=1 to 35 do Ввывод 3. Умножение бегущей строкой
begin
gotoxy(i,14);
textcolor(2);
write('3. Умножение ');
delay(5000);
gotoxy(i,14);
textcolor(0);
write('3. Умножение ');
if i=35 then
begin
gotoxy(i,14);
textcolor(2);
write('3. Умножение ');
end;
end;
for i:=58 downto 35 do Ввывод 4.Умножение на скаляр бегущей строкой
begin
gotoxy(i,15);
textcolor(2);
write('4. Умножение на скаляр');
delay(5000);
gotoxy(i,15);
textcolor(0);
write('4. Умножение на скаляр');
if i=35 then
begin
gotoxy(i,15);
textcolor(2);
write('4. Умножение на скаляр');
end;
end;
for i:=1 to 35 do Ввывод 5. Транспонирование бегущей строкой
begin
gotoxy(i,16);
textcolor(2);
write('5. Транспонирование ');
delay(5000);
gotoxy(i,16);
textcolor(0);
write('5. Транспонирование ');
if i=35 then
begin
gotoxy(i,16);
textcolor(2);
write('5. Транспонирование ');
end;
end;
for i:=25 downto 18 do Вывод 6. ВЫХОД построчно
begin
gotoxy(35,i);
textcolor(2);
write('6. В Ы Х О Д');
delay (5000);
gotoxy(35,i);
textcolor(0);
write('6. В Ы Х О Д ');
if i=18 then
begin
gotoxy(35,i);
textcolor(2);
write('6. В Ы Х О Д');
end;
end;
for i :=25 downto 20 do Вывод Выберите пункт меню и нажмите ввод
begin
gotoxy (25, i );
textcolor (9);
write (' Вывод Выберите пункт меню и нажмите ввод ');
delay (5000);
gotoxy (25, i );
textcolor (0);
write (' Вывод Выберите пункт меню и нажмите ввод ');
if i=20 then
begin
gotoxy(25,i);
textcolor (25);
write (' Вывод Выберите пункт меню и нажмите ввод ');
end;
end;
while keypressed do key:=readkey; Очистка буфера клавиатуры
repeat until keypressed; Ожидание нажатия клавиши
1: Метка 1
clrscr;
repeat
gotoxy(37,10);
textcolor(13);
write(' М Е Н Ю ');
gotoxy(35,12);
textcolor(2);
write('1. Сложение ');
gotoxy(35,13);
write('2. Вычитание ');
gotoxy(35,14);
write('3. Умножение');
gotoxy(35,15);
write('4. Умножение на скаляр');
gotoxy(35,16);
write('5. Транспонирование');
gotoxy(35,18);
write('6. В Ы Х О Д');
gotoxy (35,20);
textcolor (25);
write (' Вывод Выберите пункт меню и нажмите ввод ');
gotoxy(25,20);
writeln;
gotoxy(40,22);
readln(ch);
clrscr;
until (ch=#49)or(ch=#50)or(ch=#51)or(ch=#52)or(ch=#53)or(ch=#54); Проверка кода нажатой клавиши
case ch of
#49:begin
clrscr;
textcolor(9);
Writeln (' Введите размер матрицы A,B: '); textcolor(10);
Read(z);
Writeln; textcolor(9);
Writeln(' Введите ',z*z,' элементов для каждой матрицы '); textcolor(13);
Writeln(' Матрица A: '); textcolor(10); Vvod(z,A);
Writeln; textcolor(13); Writeln(' Матрица B: '); textcolor(10); Vvod(z,B); Writeln; textcolor(13);
Writeln('Результат сложения матриц А+В: '); textcolor(10);
slog(a,b,z,c);
textcolor(10);
vivod(z,c);
gotoxy(25,25);
textcolor(19);
write('Для продолжения нажмите ввод...');
repeat until keypressed;
goto 1; Возвращение на метку 1
end;
#50:begin
clrscr;
textcolor(9);
Writeln (' Введите размер матрицы A,B: '); textcolor(10);
Read(z);
Writeln; textcolor(9);
Writeln(' Введите ',z*z,' элементов для каждой матрицы '); textcolor(13);
Writeln(' Матрица A: '); textcolor(10); Vvod(z,A);
Writeln; textcolor(13); Writeln(' Матрица B: '); textcolor(10); Vvod(z,B); Writeln; textcolor(13);
Writeln('Результат вычитание матриц А-В: '); textcolor(10);
Vic(a,b,z,c); textcolor(10); vivod(z,c); gotoxy(25,25); textcolor(19);
write(' Для продолжения нажмите ввод ...'); repeat until keypressed;
goto 1; Возвращение на метку 1
end;
#51:begin
clrscr;
textcolor(9);
Writeln (' Введите размер матрицы A,B: '); textcolor(10);
Read(z);
Writeln; textcolor(9);
Writeln(' Введите ',z*z,' элементов для каждой матрицы '); textcolor(13);
Writeln(' Матрица A: ');
textcolor(10);
Vvod(z,A);
Writeln; textcolor(13); Writeln(' Матрица B: '); textcolor(10); Vvod(z,B); Writeln; textcolor(13);
Writeln('Результат умножения матриц А*В: '); textcolor(10);
Ymn(a,b,z,c); textcolor(10); Vivod(z,c); gotoxy(25,25); textcolor(19);
write(' Для продолжения нажмите ввод ...'); repeat until keypressed;
goto 1; Возвращение на метку 1
end;
#52:begin
clrscr;
textcolor(9);
Writeln (' Введите размер матрицы A: '); textcolor(10);
Read(z);
Writeln; textcolor(9);
Writeln(' Введите ',z*z,' элементов для каждой матрицы '); textcolor(13);
Writeln(' Матрица A: '); textcolor(10);
Vvod(z,A);
Writeln; textcolor(13); write(' Введите скаляр :'); textcolor(10); readln(s); textcolor(13);
Writeln('Результат умножения матрицы А на ',s,' :'); textcolor(10);
Skal(a,z,s,c); textcolor(10); vivod(z,c); gotoxy(25,25); textcolor(19);
write(' Для продолжения нажмите ввод ...'); repeat until keypressed;
goto 1; Возвращение на метку 1
end;
#53:begin
clrscr;
textcolor(9);
Writeln (' Введите размер матрицы A: '); textcolor(10);
Read(z);
Writeln; textcolor(9);
Writeln(' Введите ',z*z,' элементов для каждой матрицы '); textcolor(13);
Writeln(' Матрица A: '); textcolor(10); Vvod(z,A);
Writeln; textcolor(13);
Writeln('Результат транспонирования матрицы А: '); textcolor(10);
Tran(a,z,c); textcolor(10); vivod(z,c); gotoxy(25,25); textcolor(19);
write(' Для продолжения нажмите ввод ...'); repeat until keypressed;
goto 1; Возвращение на метку 1
end;
#54:begin
clrscr;
textcolor(3);
writeln(' \.` ''.''~-.` ''./');
writeln(' (\`,__=-''__,''/)');
writeln(' _.-''-.( d\_/b ).-''-._');
writeln(' /''.-'' '' .---. '' ''.`\');
writeln(' /'' .'' (= (_) =) ''. `\');
writeln(' /'' .'', `-.__.-.__.-'' ,''`\');
writeln(' ( .''. V V ; ''. )');
writeln(' ( |:: `-,__.-.__,-'' ::| )');
writeln(' | /|`:. .:''|\ |');
writeln(' | / | `:. :'' |`\ |');
writeln(' | | ( :. .: ) | |');
writeln(' | | ( `:. :'' ) ||');
writeln(' | | \ :. .: / | |');
writeln(' | | \`:. .:''/ ||');
writeln(' ) ( `\`:. .:''/'' (');
writeln(' ( `)_ ) `:._.:'' ( _(` )');
writeln(' \ '' _) .'' `. (_ `/');
writeln(' \ ''_) / .''"```"''. \ (_`/');
writeln(' `''"` \ ( ) / `"''`');
writeln(' ___ `.`. .''.'' ___');
writeln(' .` ``"""''''''--`_) (_''''''"""`` `.');
writeln(' (_(_(___...--''"''` `''"''-- ...___)_)_)');
gotoxy(35,12);
textcolor(21);
write('Good bay!');
repeat until keypressed;
end;
end;
End.
4.Заключение
Я разработала программу для проведения основных операций над матрицами: транспонирование матрицы, сложение двух матриц, умножение матрицы на число, перемножение двух матриц.
В моей работе сформулированы основные понятия теории матриц. Элементы матриц вводятся с клавиатуры, на экран выводится информация о том, какие матрицы обрабатываются и результат обработки . Программа рациональна и легко читаема, в ней вставлены комментарии для объяснения работы отдельных блоков программы. Программа предусматривает выход из неё.
В программе использовались процедуры и функции; циклы с постусловием, предусловием, с параметром; массивы; условный оператор, оператор выбора, присваивания; работа в текстовом режиме.
Таким образом, в ходе написания данной курсовой работы был закреплен весь пройденный на лекциях и практикуме материал.
5. Список литературы
1. Попов “ Turbo Pascal для школьников” Москва 2000г.
2. Земляков А.В. “Курс лекции по программированию на языке Turbo Pascal ”
3. “Математический энциклопедический словарь”
под редакцией Ю.В. Прохорова Москва 1988 г.
4. Г. Д. Ким, Е. В. Шикин “Элементарные преобразования в линейной алгебре”