4616
Разработка программ, использующих массивы, множества и записи
Контрольная
Информатика, кибернетика и программирование
Тип в программировании – это множество, для которого оговорен некоторый набор операций над элементами. Сами элементы множества называются объектами или значениями данного типа. Типы realиinteger – это числовые множеств...
Русский
2012-11-23
386.5 KB
8 чел.
Тип в программировании это множество, для которого оговорен некоторый набор операций над элементами. Сами элементы множества называются объектами или значениями данного типа.
Типы real и integer это числовые множества. Вместе с ними рассматривают соответствующие арифметические операции и операции сравнения. Тип char это множество символов. Вместе с ними рассматривают операции сравнения.
Эти три типа считаются стандарными типами языка Delphi. Вместе с тем, в языке имеются средства, позволяющие определять, исходя из этих базовых типов, новые нестандартные типы. К ним относятся массивы, множества, строки и записи.
Содержание работы:
Требования к отчету:
Отчет по работе должен содержать:
Краткая теория
В математике, технике и других науках часто рассматривают множества упорядоченных элементов, называемых массивами и представляющих собой набор каких либо объектов (чисел, символов и т.п.) одного типа. Каждый объект массива помимо своего значения характеризуется местоположением, называемым индексом (номером).
Способ индексации, тип элементов, длина массива фиксируются в описании того типа, которому принадлежит массив.
Описание одномерного массива имеет, например, такой вид:
const
n=-10; m=20;
type
Tvector_r = array [n..m] of real; //Массив вещественных чисел
Tvector_i = array [0..99] of integer; //Массив целых чисел
Tvector_c = array [A..Z] of char; //Массив символов
var
A,B: Tvector_r; // Переменные типа массив вещественных чисел
C,D: Tvector_i; // Переменные типа массив целых чисел
E,F: Tvector_c; // Переменные типа массив символов
G,H: array [-5..5] of integer; // Явное объявление массивов
Для обращения к элементам массива используется имя переменной, объявленной как массив, и индекс, заключенный в квадратные скобки, например,
A[-5]:=sin(-5*x); C[i+1]:=C[i]+D[50];
Операции над объектами типа одномерный массив это доступ к отдельным элементам массивов с помощью индексов и изменения отдельных элементов массивов с помощью допустимых для данного типа операций.
Рассмотрим несколько примеров.
Пример 1.1. Пусть а[1], ..., а[20] количество осадков в миллиметрах, выпадавшее в Киеве в течение последних 20 лет. Надо вычислить среднее количество осадков и отклонение от среднего для каждого года. Программа может выглядеть так:
program osadki;
const n=20;
type
t = array [1..n] of real;
var
a: t;
i: integer;
s: real;
begin
s:=0;
for i:=1 to n do
begin
read(a[i]);
s:=s+a[i]
end;
s:=s/n;
writeln(s);
for i:=1 to n do
writeln(sa[i]);
readln
end.
В определении типа t указан диапазон изменения индекса от 1 до n, где n = 20 определено выше как константа. Можно было бы взять и диапазон от 0 до n-1. Вообще, можно было в качестве границ взять любые целые числа, разность между которыми равна 19. Например, естественным был бы диапазон от 1901 до 1920 описание типа t выглядело бы тогда так:
type
t = array [1901..1920] of real
Соответствующие изменения потребовалось бы внести и в операторы цикла:
for i:=1901 to 1920 do ...
Пример 1.2. Дана последовательность символов (объектов типа char) s1, s2, ..., s30. Требуется определить, совпадает ли начальная часть s1, ..., s15 последовательности с ее концевой частью s16, ..., s30.
Программа может выглядеть так:
program dubl;
label
M;
type
t = array[1..15] of char;
var
x: t;
y: char;
r: integer;
begin
for i:=1 to 15 do
read(x[i]);
for i:=1 to 15 do
begin
read(y);
if x[i]<>y then
begin
write('не ');
goto M
end
end;
M: write('совпадают');
readln;
end.
Программа не требует одновременного удерживания в памяти обеих частей данной последовательности символов.
Задание № 1. Программирование задачи с использованием одномерного массива
Для конкретного варианта, представленного в табл. 1.1, составить программу решения поставленной задачи.
Пример составления программы
A[i]:=random;
min:=A[1]; imin:=1;
Program Vector1;
{$APPTYPE CONSOLE}
uses
SysUtils;
Const
n=20; // Максимальный размер 20
Type
TVector = array[1..n] of real;
Var
A: TVector;
max,min,sr,d: real;
i,imax,imin: integer;
function Rus(mes: string): string;
var
i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);
'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
end;
Rus:=mes;
end;
Begin
Randomize;
// Формирование элементов матрицы
for i:=1 to n do
A[i]:=random; //Элементы массива - случайные числа от 0 до 1
sr:=0; //Обнуление суммы элементов
max:=A[1]; //Вначале предполагается, что максимальный и
imax:=1; // минимальный элементы находятся в начале массива
min:=A[1];
imin:=1;
for i:=1 to n do
begin
if A[i]>max then
begin
max:=A[i];
imax:=i;
end;
if A[i]<min then
begin
min:=A[i];
imin:=i;
end;
sr:=sr+A[i]
end;
sr:=sr/n;
d:=max-min;
// Вывод результатов
Writeln(Rus('Массив А'));
for i:=1 to n do
Write(A[i]:4:2,' ');
Writeln;
Writeln(Rus('Максимальный элемент ='),max:4:2,' i=',imax:4);
Writeln(Rus('Минимальный элемент ='),min:4:2,' i=',imin:4);
Writeln(Rus('Среднее значение ='),sr:4:2);
Writeln(Rus('Размах выборки ='),d:4:2);
Readln;
End.
Технология работы
Таблица 1.1.
№ варианта |
Задача |
Условия |
1 |
Рассчитать дисперсию случайных чисел xi по формуле , где - выборочное среднее. |
n = 50; случайные числа вещественные и распределены в диапазоне от -1 до +1. |
2 |
Рассчитать выборочный центральный момент 3-го порядка: где - выборочное среднее. Вычислить несмещенную оценку |
n = 100; случайные числа вещественные и распределены в диапазоне от -5 до +5. |
3 |
Рассчитать среднее геометрическое: |
n = 100; случайные числа положительные вещественные и распределены в диапазоне от 1 до 10. |
4 |
Рассчитать среднее гармоническое |
n = 50; случайные числа положительные вещественные и распределены в диапазоне от 1 до 2. |
5 |
Рассчитать квадратичное среднее: |
n = 100; случайные числа вещественные и распределены в диапазоне от -2 до 2. |
6 |
Рассчитать квадратичное отклонение |
n = 50; с=5; случайные числа вещественные и распределены в диапазоне от 0 до 7. |
7 |
Даны действительные a1, ..., a15, b1,..., b15. Вычислить . |
Элементы массивов А и В - случайные вещественные в диапазоне от 0 до 1. |
8 |
Система 10 материальных точек на плоскости задана с помощью действительных чисел x1, y1, m1, …, x10, y10, m10, где xi, yi координаты i-й точки, а mi ее масса, i = 1, ..., 10. Получить координаты центра масс (центра тяжести) системы, а также расстояния от центра масс до каждой из точек системы. Координаты центра масс могут быть вычислены по формулам |
Элементы массивов Х, Y и М - случайные вещественные в диапазоне от 1 до 100. |
9 |
Даны действительные a1, ..., a16. Получить: а) max(a1 + a16, a2 + a15, …, a8 + a9); б) min(a1a9, a2a10, …, a8a16). |
Элементы массива А - случайные вещественные в диапазоне от 1 до 10. |
10 |
Даны действительные a0, a1, ..., an. Вычислить |
n=20. Элементы массива А - случайные вещественные в диапазоне от -10 до 10. |
11 |
Дано: натуральное n, действительные а1, ..., аn. Получить: , |
n=50. Элементы массива А - случайные вещественные в диапазоне от -5 до 10. |
12 |
Дано: натуральное n, действительные у1, ..., yn. Найти: , где |
n=50. Элементы массива Y - случайные вещественные в диапазоне от -10 до 10. |
13 |
Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула |
n=100. Элементы массива А - случайные вещественные в диапазоне от 0 до 1. |
14 |
Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула |
n=50. Элементы массива А - случайные вещественные в диапазоне от 0 до 10. |
15 |
Даны действительные a1, ..., an. Требуется найти b, равное среднему арифметическому чисел a1, ..., an, и наибольшее отклонение от среднего, т.е. max(| a1 b |, | a2 b |, …, | an b |). |
n=100. Элементы массива А - случайные вещественные в диапазоне от 0 до 10. |
16 |
Дано: натуральное n, действительные у1, ..., yn. Найти: , где |
n=100. Элементы массива Y - случайные вещественные в диапазоне от 0 до 100. |
17 |
Рассчитать дисперсию случайных чисел xi по формуле , где - выборочное среднее. |
n = 50; случайные числа вещественные и распределены в диапазоне от -1 до +1. |
18 |
Рассчитать выборочный центральный момент 3-го порядка: где - выборочное среднее. Вычислить несмещенную оценку |
n = 100; случайные числа вещественные и распределены в диапазоне от -5 до +5. |
19 |
Рассчитать среднее геометрическое: |
n = 100; случайные числа положительные вещественные и распределены в диапазоне от 1 до 10. |
20 |
Рассчитать среднее гармоническое |
n = 50; случайные числа положительные вещественные и распределены в диапазоне от 1 до 2. |
21 |
Рассчитать квадратичное среднее: |
n = 100; случайные числа вещественные и распределены в диапазоне от -2 до 2. |
22 |
Рассчитать квадратичное отклонение |
n = 50; с=5; случайные числа вещественные и распределены в диапазоне от 0 до 7. |
23 |
Даны действительные a1, ..., a15, b1,..., b15. Вычислить . |
Элементы массивов А и В - случайные вещественные в диапазоне от 0 до 1. |
24 |
Система 10 материальных точек на плоскости задана с помощью действительных чисел x1, y1, m1, …, x10, y10, m10, где xi, yi координаты i-й точки, а mi ее масса, i = 1, ..., 10. Получить координаты центра масс (центра тяжести) системы, а также расстояния от центра масс до каждой из точек системы. Координаты центра масс могут быть вычислены по формулам |
Элементы массивов Х, Y и М - случайные вещественные в диапазоне от 1 до 100. |
25 |
Даны действительные a1, ..., a16. Получить: а) max(a1 + a16, a2 + a15, …, a8 + a9); б) min(a1a9, a2a10, …, a8a16). |
Элементы массива А - случайные вещественные в диапазоне от 1 до 10. |
26 |
Даны действительные a0, a1, ..., an. Вычислить |
n=20. Элементы массива А - случайные вещественные в диапазоне от -10 до 10. |
27 |
Дано: натуральное n, действительные а1, ..., аn. Получить: , |
n=50. Элементы массива А - случайные вещественные в диапазоне от -5 до 10. |
28 |
Дано: натуральное n, действительные у1, ..., yn. Найти: , где |
n=50. Элементы массива Y - случайные вещественные в диапазоне от -10 до 10. |
29 |
Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула |
n=100. Элементы массива А - случайные вещественные в диапазоне от 0 до 1. |
30 |
Дано: натуральное n, действительные а1, ..., аn. Вычислить: . При возведении в степень используется формула |
n=50. Элементы массива А - случайные вещественные в диапазоне от 0 до 10. |
Краткая теория
Матрица представляет собой прямоугольную таблицу однотипных объектов (чисел, символов, строк и т.п.), расположенных строками и столбцами. Она записывается следующим образом:
Такая таблица называется (mn)- матрицей, так как она имеет m - строк и n - столбцов.
Матрица представляет двухмерную таблицу, поэтому для обозначения каждого из ее элементов необходимо использовать двойные индексы: aij, где i первый индекс, обозначающий номер строки (i = 1, 2, …, m); j второй индекс номер столбца (j = 1, 2, …, n).
Матрица, имеющая одинаковое число строк и столбцов, равное n, называется квадратной матрицей n-го порядка.
Частным случаем матрицы является вектор A упорядоченная совокупность n объектов, записанных либо строкой , либо столбцом:
где ai, i=1, ... , n компоненты вектора A.
Операции над матрицами это операции над таблицами чисел. К ним относятся:
1. Равенство. Две матрицы А и B называются равными (обозначают A = B), если они идентичны, другими словами, если равны их соответствующие компоненты, т.е. aij = bij для каждых i, j.
2. Умножение на скаляр. Пусть дана матрица А и скаляр .. Произведением А является матрица
,
т.е. каждый элемент матрицы А умножен на скаляр .
3. Сложение. Суммой матрицы А, имеющей m строк и n столбцов и матрицы B, имеющей m строк и n столбцов, называется матрица С, элементы которой равны
cij = aij + bij (для всех i, j).
Это можно записать так:
C = A + B.
Две матрицы суммируются сложением соответствующих элементов, при этом размеры суммируемых матриц должны быть идентичными.
4. Вычитание. Определяется через уже рассмотренные действия:
A B = A + (1)B
Вычитание двух матриц сводится к вычитанию соответствующих элементов этих матриц. Матрицы должны быть идентичными по размерам.
5. Умножение. Произведением матрицы А размерами mn и матрицы B размерами nr- (записывается AB) называется матрица C, элементы которой получаются из элементов матрицы А и В по следующей формуле:
.
Матрица А допускает умножение на матрицу В и дает произведение AB в том и только том случае, когда число столбцов в матрице А совпадает с числом строк в матрице В. Произведение С = AB имеет одинаковое число строк с матрицей А и одинаковое число столбцов с матрицей В.
6. Транспонирование. Матрицей, транспонированной к матрице А, является матрица, образованная из матрицы А заменой i-й строки матрицы А ее i-м столбцом.
Транспонирование обозначается через АТ, т.е.
АТ = [ aji ], когда А = [ aij ].
Если А является (mn)- матрицей, то АТ является (nm)-матрицей.
7. Степень матрицы. Квадратная матрица Аn равна произведению
Возведение в степень n сводится к n операциям умножения.
Специальные виды матриц:
1. Диагональная матрица. Диагональной называется квадратная матрица, все элементы которой равны 0, кроме тех, что расположены на главной диагонали:
2. Единичная матрица это диагональная квадратная матрица, все элементы главной диагонали которой равны 1, а остальніе 0.
3. Нулевая матрица матрица, все элементы которой равны 0.
Следом квадратной матрицы порядка n является сумма ее диагональных элементов:
.
С точки зрения программирования, матрица это структура двухмерного массива, представляющего собой совокупность компонент переменных одного и того же типа.
Пример описания матрицы:
const
m=10; n=20;
Type
Tmatrix=array[1..m,1..n] of real;
Var
A, B: Tmatrix;
Можно объявить матрицы и так:
Var
A, B: array[1..10,1..20] of real;
но такое объявление является менее предпочтительным.
Индексы элементов и соответственно границы, указываемые в объявлениях, могут быть отрицательными и нулевыми, но обязательно порядкового типа (например, целыми), т.е. допустимы объявления:
const
m=10; n=20;
Type
Tmatrix=array[-m..m-1,-n..n-1] of real;
Var
A, B: Tmatrix;
C, D: array[0..5,-5..10] of integer;
E, F: array['a'.. 'z', '0'.. '9'] of char;
Характерные особенности:
1. Каждая компонента массива может быть явно обозначена и к ней имеется прямой доступ.
2. Число компонент массива определяется при его описании и в дальнейшем не меняется.
В Паскале число элементов массива должно быть задано заранее. Если необходимо использовать массивы переменной размерности, то приходится описывать массивы с максимально возможным в данной задаче числом элементов, а затем использовать только часть из этих элементов.
Каждый элемент массива имеет свой порядковый номер, называемый индексом элемента в массиве. Индексы массива могут быть любого порядкового типа, чаще - целочисленного. Для матрицы элементы массива задаются двумя индексами: A[i,j] или A[i][j].
При работе с матрицами можно выделить два класса задач:
1) задачи с использованием одной матрицы;
2) задачи, в которых осуществляются матричные операции над несколькими матрицами.
Задание № 2. Программирование задачи с использованием одной матрицы
Для конкретного варианта, представленного в табл. 2.1, составить программу решения поставленной задачи.
С клавиатуры вводятся значения элементов заданной матрицы по строкам.
Пример составления программы
A[i,j]:=random(100);
min:=A[1,1]; imin:=1; jmin:=1;
Program Matrix1;
{$APPTYPE CONSOLE}
uses
SysUtils;
Const
m=100; // Максимальный размер матрицы 100х100
Type
TMatrix = array[1..m,1..m] of integer;
Var
A: TMatrix;
n,i,j: integer;
max,imax,jmax: integer;
min,imin,jmin: integer;
tr: integer;
function Rus(mes: string): string;
var
i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);
'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
end;
Rus:=mes;
end;
Begin
Randomize;
Writeln(Rus('Введите порядок матрицы'),' n<=10');
Readln(n);
// Формирование элементов матрицы
for i:=1 to n do
for j:=1 to n do
A[i,j]:=random(m); {Элементы матрицы - случайные числа от 0 до 100}
tr:=0; //Обнуление сумматора, накапливающего след матрицы
max:=A[1,1]; //Вначале предполагается, что максимальный и
imax:=1; // минимальный элементы находятся в начале матрицы
jmax:=1;
min:=A[1,1];
imin:=1;
jmin:=1;
for i:=1 to n do
for j:=1 to n do
begin
if A[i,j]>max then
begin
max:=A[i,j];
imax:=i;
jmax:=j;
end;
if A[i,j]<min then
begin
min:=A[i,j];
imin:=i;
jmin:=j;
end;
end;
for i:=1 to n do
tr:=tr+A[i,i];
// Вывод полученой матрицы
Writeln(Rus('Матрица А'));
for i:=1 to n do
begin
for j:=1 to n do
Write(A[i,j]:4,' ');
Writeln;
end;
Writeln(Rus('Максимальный элемент ='),max:4,' i=',imax:2,' j=',jmax:2);
Writeln(Rus('Минимальный элемент ='),min:4,' i=',imin:2,' j=',jmin:2);
Writeln(Rus('След матрицы ='),tr:6);
Readln;
End.
Технология работы
Таблица 2.1.
№ варианта |
Задача |
Исходная матрица |
1 |
Найти суммы чисел в первом и последнем столбцах и сравнить их. Полученный массив напечатать. |
|
2 |
Найти максимальный элемент среди элементов, сумма индексов которых нечетна. Результат вывести на печать. |
|
3 |
Упорядочить массив по убыванию элементов в каждом столбце. Результат напечатать. |
|
4 |
Упорядочить массив по возрастанию элементов в каждой строке. Результат напечатать. |
|
5 |
Найти сумму элементов в первой строке, а затем в последней, и сравнить их. Результаты напечатать с соответствующими заголовками. |
|
6 |
Найти количество чисел, входящих в массив только один раз. Результат напечатать. |
|
7 |
Найти сумму максимального и минимального элементов. Полученное значение увеличить на 10. Результат напечатать. |
|
8 |
В каждой строке найти наибольший элемент, затем получить их сумму. Результат напечатать. |
|
9 |
В каждом столбце найти наибольший элемент, затем найти их произведение. Результат напечатать. |
|
10 |
Найти произведение последних элементов строк. Результат напечатать. |
|
11 |
Найти сумму элементов, расположенных ниже главной диагонали, и сумму элементов, расположенных выше главной диагонали. Результаты сравнить и напечатать. |
|
12 |
Найти сумму элементов, расположенных на главной диагонали в строках, начинающихся с нуля. Результат напечатать. |
|
13 |
Транспонировать матрицу и найти ее след. Преобразованный массив напечатать. |
|
14 |
Найти строку, содержащую минимальный элемент, и упорядочить ее по убыванию элементов. Результат напечатать. |
|
15 |
Найти количество элементов, равных заданному значению (4), и указать их позиции. Результат напечатать. |
|
16 |
Найти сумму элементов, находящихся в нечетных столбцах, и произведение элементов, находящихся в четных строках. Результат напечатать. |
|
17 |
Найти суммы чисел в первом и последнем столбцах и сравнить их. Полученный массив напечатать. |
|
18 |
Найти максимальный элемент среди элементов, сумма индексов которых нечетна. Результат вывести на печать. |
|
19 |
Упорядочить массив по убыванию элементов в каждом столбце. Результат напечатать. |
|
20 |
Упорядочить массив по возрастанию элементов в каждой строке. Результат напечатать. |
|
21 |
Найти сумму элементов в первой строке, а затем в последней, и сравнить их. Результаты напечатать с соответствующими заголовками. |
|
22 |
Найти количество чисел, входящих в массив только один раз. Результат напечатать. |
|
23 |
Найти сумму максимального и минимального элементов. Полученное значение увеличить на 10. Результат напечатать. |
|
24 |
В каждой строке найти наибольший элемент, затем получить их сумму. Результат напечатать. |
|
25 |
В каждом столбце найти наибольший элемент, затем найти их произведение. Результат напечатать. |
|
26 |
Найти произведение последних элементов строк. Результат напечатать. |
|
27 |
Найти сумму элементов, расположенных ниже главной диагонали, и сумму элементов, расположенных выше главной диагонали. Результаты сравнить и напечатать. |
|
28 |
Найти сумму элементов, расположенных на главной диагонали в строках, начинающихся с нуля. Результат напечатать. |
|
29 |
Транспонировать матрицу и найти ее след. Преобразованный массив напечатать. |
|
30 |
Найти строку, содержащую минимальный элемент, и упорядочить ее по убыванию элементов. Результат напечатать. |
Задание № 3. Программирование задачи с использованием нескольких матриц
При решении задач с несколькими матрицами важно отметить, что одни и те же операции производятся с несколькими матрицами, поэтому типовые операции с матрицами лучше оформить в виде процедур и использовать эти процедуры при решении задачи.
Определим типовые процедуры для работы с матрицами:
Операцию вычитания матриц (А В) сведем к двум операциям: операция умножение матрицы В на скаляр (-1) и операция сложения двух матриц: А В = А + (-1)В.
Возведение в степень n сводится к n операциям умножения матрицы А.
Задача 3.1. Ввести значения элементов квадратной матрицы А порядка n и полученную матрицу вывести в привычном виде (1 строка матрицы - 1 строка экрана).
Ввод и вывод матрицы оформить в виде процедуры.
Решение. Процедуры ввода и вывода матрицы должны содержать в качестве параметров: порядок матрицы, идентификатор, которой выдается при вводе или выводе и имя матрицы. Перед вводом элемента на экран выводится поясняющий текст, в котором кроме индексов очередного элемента матрицы выдается имя матрицы (ее идентификатор). При выводе перед каждым элементом выводится имя матрицы, индексы элемента, а затем значение элемента. Максимальный порядок матрицы, с которой можно работать, задается с помощью константы NN. Если матрица используется в качестве параметра процедуры, то для нее надо дать явное определение типа:
Type TMatrix = array[1..NN,1..NN] of real;
и при описании параметра в заголовке процедуры указать этот тип.
Текст программы:
Program Z3_1; // Программа ввода и вывода элементов матрицы
{$APPTYPE CONSOLE}
uses
SysUtils;
Const
NN=100; // Максимальная размерность матрицы
Type
TMatr=array[1..NN,1..NN] of real ;
Var
n: integer; // Порядок матрицы
A: TMatr; // Матрица
ch: char; // Идентификатор для ввода и вывода матрицы
function Rus(mes: string): string;
var
i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);
'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
end;
Rus:=mes;
end;
// Процедура ввода элементов матрицы
Procedure Mvvod(n: integer; ch: char; var A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(ch,'[',i:2,',',j:2,']=');
Readln(A[i,j]);
end;
end;
end;
// Процедура вывода (печати) элементов матрицы
Procedure Mvivod(n: integer; ch: char; A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);
Writeln;
end;
end;
// Основная программа
begin
Writeln(Rus('Введите порядок матрицы'), ' n <= 10 ');
Readln(n);
ch:='A'; // Идентификатор массива
// Ввод матрицы
Mvvod(n,ch,A);
// Вывод матрицы
Mvivod(n,'A',A); {Идентификатор можно задать как параметр-значение}
Readln;
end.
Задача 3.2. Из квадратной матрицы А порядка n получить матрицу С = 3AТ. Исходную и полученную матрицу распечатать.
Решение. Для ввода и вывода результатов можно использовать рассмотренные в задаче 3.1 процедуры Mvvod и Mvivod. В данной задаче надо выполнить транспонирование матрицы и умножение матрицы на скаляр число 3.
Транспонирование матрицы заключается в замене строк на столбцы. Процедура Mtran, осуществляющая транспонирование матрицы, в качестве параметров содержит: порядок матрицы, имя исходной матрицы и имя матрицы, в которую помещается результат транспонирования. В качестве параметров процедуры умножения матрицы на скаляр Mscaliar, кроме перечисленных в процедуре Mtran параметров, необходимо ввести дополнительный параметр скаляр, на который надо умножить матрицу.
Текст программы:
Program Z3_2; // Транспонирование матрицы и умножение на скаляр
{$APPTYPE CONSOLE}
uses
SysUtils;
Const NN=10; // Максимальная размерность матрицы
Type TMatr = array[1..NN,1..NN] of real;
Var
n: integer; // Порядок матрицы
A,C: TMatr; // Исходная матрица и матрица результата
sc: real; // Скаляр, на который умножается матрица
ch: char; // Идентификатор для ввода и вывода матрицы
function Rus(mes: string): string;
var
i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);
'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
end;
Rus:=mes;
end;
// Процедура ввода элементов матрицы
Procedure Mvvod(n: integer; ch: char; var A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(ch,'[',i:2,',',j:2,']=');
Readln(A[i,j]);
end;
end;
end;
// Процедура вывода (печати) элементов матрицы
Procedure Mvivod(n: integer; ch: char; A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);
Writeln;
end;
end;
// Процедура умножения матрицы на скаляр
Procedure Mscaliar(n: integer; sc: real; A: TMatr; var C: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
for j:=1 to n do
C[i,j]:=sc*A[i,j]; // Умножение очередного элемента на скаляр
end;
// Процедура транспонирования матрицы
Procedure Mtran(n: integer; A: TMatr; var AT: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
AT[j,i]:=A[i,j] // Строки матрицы преобразуются в столбцы
end
end;
// Основная программа
begin
Writeln(Rus('Введите порядок матрицы'),' n<=10');
Readln(n);
Writeln(Rus('Введите значение скаляра'),' sc = ');
Readln(sc);
Mvvod(n,'A',A); // Ввод матрицы А
Writeln(Rus('Матрица А - исходная'));
Mvivod(n,'A',A); // Вывод матрицы А
Mtran(n,A,C); // Транспонирование матрицы А
Writeln(Rus('Транспонированная матрица'));
Mvivod(n,'T',C); // Вывод транспонированной матрицы
Writeln(Rus('Матрица С - результат умножения на скаляр'));
Mscaliar(n,sc,C,C); // Умножение матрицы на скаляр
Mvivod(n,'C',C); // Вывод транспонированной матрицы,
//умноженной на скаляр
Readln;
end.
Задача 3.3. Получить С =А + В , где А, В и С - квадратные матрицы порядка n. Исходные матрицы и результат распечатать.
Решение. Для ввода и вывода результатов можно использовать рассмотренные в задаче 3.1 процедуры Mvvod и Mvivod. Две матрицы суммируются сложением соответствующих элементов. Параметрами процедуры сложения двух матриц Msumma являются: порядок матриц, матрицы, которые надо сложить и матрица, являющаяся результатом сложения.
Текст программы:
Program Z3_3; // Сложение матриц
{$APPTYPE CONSOLE}
uses
SysUtils;
Const NN=10; // Максимальная размерность матрицы
Type TMatr = array[1..NN,1..NN] of real;
Var
n: integer; // Порядок матрицы
A,B,C: TMatr; // Исходные матрицы А, В и матрица результата С
ch: char; // Идентификатор для ввода и вывода матрицы
function Rus(mes: string): string;
var
i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);
'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
end;
Rus:=mes;
end;
// Процедура ввода элементов матрицы
Procedure Mvvod(n: integer; ch: char; var A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(ch,'[',i:2,',',j:2,']=');
Readln(A[i,j]);
end;
end;
end;
// Процедура вывода (печати) элементов матрицы
Procedure Mvivod(n: integer; ch: char; A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);
Writeln;
end;
end;
// Процедура сложения двух матриц
Procedure Msumma(n: integer; A,B: TMatr; var C: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
for j:=1 to n do
C[i,j]:=A[i,j]+B[i,j];
end;
// Основная программа
begin
Writeln(Rus('Введите порядок матрицы'),' n<=10');
Readln(n);
Mvvod(n,'A',A); // Ввод матрицы А
Mvvod(n,'B',B); // Ввод матрицы B
Writeln(Rus('Матрица А - исходная'));
Mvivod(n,'A',A); // Вывод матрицы А
Writeln(Rus('Матрица В - исходная'));
Mvivod(n,'B',B); // Вывод матрицы B
Msumma(n,A,B,C); // Сложение матриц А и В
Writeln(Rus('Матрица С - результат '),'A+B');
Mvivod(n,'C',C); // Вывод результата
Readln;
end.
Задача 3.4. Получить С =АВ , где А, В и С квадратные матрицы порядка n. Исходные матрицы и результат распечатать.
Решение. Для ввода и вывода результатов можно использовать рассмотренные в задаче 3.1 процедуры Mvvod и Mvivod. Формула для умножения двух матриц приведена выше. Параметры процедуры умножения двух матриц Mumn аналогичны параметрам процедуры сложения двух матриц Msumma, рассмотренной в предыдущей задаче 3.3.
Текст программы:
Program Z3_4; // Умножение квадратных матриц
{$APPTYPE CONSOLE}
uses
SysUtils;
Const NN=10; // Максимальная размерность матрицы
Type TMatr = array[1..NN,1..NN] of real;
Var
n: integer; // Порядок матрицы
A,B,C: TMatr; // Исходные матрицы А, В и матрица результата С
ch: char; // Идентификатор для ввода и вывода матрицы
function Rus(mes: string): string;
var
i: integer;
begin
for i:=1 to length(mes) do
case mes[i] of
'A'..'п': mes[i]:=Chr(Ord(mes[i])-64);
'р'..'я': mes[i]:=Chr(Ord(mes[i])-16);
end;
Rus:=mes;
end;
// Процедура ввода элементов матрицы
Procedure Mvvod(n: integer; ch: char; var A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
begin
Write(ch,'[',i:2,',',j:2,']=');
Readln(A[i,j]);
end;
end;
end;
// Процедура вывода (печати) элементов матрицы
Procedure Mvivod(n: integer; ch: char; A: TMatr);
Var
i,j: integer;
begin
for i:=1 to n do
begin
for j:=1 to n do
Write(ch,'[',i:2,',',j:2,']=',A[i,j]:4:1);
Writeln;
end;
end;
// Процедура умножения двух квадратных матриц
Procedure Mumn(n: integer; A,B: TMatr; var C: TMatr);
Var
i,j,k: integer;
s: real; // Сумма произведений A[k,i]*B[i,j]
begin
for k:=1 to n do
begin
for j:=1 to n do
begin
s:=0;
for i:=1 to n do
s:=s+A[k,i]*B[i,j];
C[k,j]:=s;
end;
end;
end;
// Основная программа
begin
Writeln(Rus('Введите порядок матрицы'),' n<=10');
Readln(n);
Mvvod(n,'A',A); // Ввод матрицы А
Mvvod(n,'B',B); // Ввод матрицы B
Writeln(Rus('Матрица А - исходная'));
Mvivod(n,'A',A); // Вывод матрицы А
Writeln(Rus('Матрица В - исходная'));
Mvivod(n,'B',B); // Вывод матрицы B
Mumn(n,A,B,C); // Умножение матриц А и В
Writeln(Rus('Матрица С - результат '),'A*B');
Mvivod(n,'C',C); // Вывод результата
Readln;
end.
Технология работы
А, В и С квадратные матрицы порядка n. Исходные матрицы и результат распечатать.
Таблица 2.2.
№ варианта |
Задача |
Матрица А |
Матрица В |
1 |
C = А+BТ-2A*B |
||
2 |
C = -АТ+B-3A*BТ |
||
3 |
C = 0.5А+B-4AТ*BТ |
||
4 |
C = 2.7(А+B-5AТ*B) |
||
5 |
C = АТ-3.2B+1.5A*B |
||
6 |
C = АТ/4-BТ+2.7A*B |
||
7 |
C = -3.5А-BТ-AТ*B |
||
8 |
C = АТ+(B*АТ-A) |
||
9 |
C = (А/2+BТ)*(2A) |
||
10 |
C = -8А+2.5AТ*B+BТ |
||
11 |
C = (АТ-2B*A)+BТ |
||
12 |
C = АТ+2.8BТ-A*B |
||
13 |
C = BТ*А-4(A+B) |
||
14 |
C = 10АТ+3(BТ-2A*B) |
||
15 |
C = 4.8(А+BТ)-6.2AТ*B |
||
16 |
C = 6.2А*BТ-4AТ+B |
||
17 |
C = А+BТ-2A*B |
||
18 |
C = -АТ+B-3A*BТ |
||
19 |
C = 0.5А+B-4AТ*BТ |
||
20 |
C = 2.7(А+B-5AТ*B) |
||
21 |
C = АТ-3.2B+1.5A*B |
||
22 |
C = АТ/4-BТ+2.7A*B |
||
23 |
C = -3.5А-BТ-AТ*B |
||
24 |
C = АТ+(B*АТ-A) |
||
25 |
C = (А/2+BТ)*(2A) |
||
26 |
C = -8А+2.5AТ*B+BТ |
||
27 |
C = (АТ-2B*A)+BТ |
||
28 |
C = АТ+2.8BТ-A*B |
||
29 |
C = BТ*А-4(A+B) |
||
30 |
C = 10АТ+3(BТ-2A*B) |
Рис. 1.1. Результаты работы программы нахождения минимального и максимального элементов одномерного массива и среднего значения
Рис. 2.1. Результаты работы программы нахождения минимального и максимального элементов матрицы, а также ее следа
А также другие работы, которые могут Вас заинтересовать | |||
71475. | СЛОВАРЬ ПО СРЕДНЕВЕКОВЫМ ШКОЛАМ И ИНСТИТУТАМ | 609.5 KB | |
Артистический факультет (лат. artis – искусство) – подготовительный факультет в средневековой высшей школе, на котором изучались семь свободных искусств. Аудитория (лат.audire - слушать) – помещение для чтения и слушания лекций. Появились в XIV веке, до этого для лекций годилось... | |||
71476. | ИСТОРИЯ ЗАРУБЕЖНОЙ КУЛЬТУРЫ. СРЕДНИЕ ВЕКА | 1.5 MB | |
Гаргульи - С французского переводится как «желоб, водосточная труба». Отсюда и их не только декоративное назначение: гаргульи издавна служат для отвода дождевой воды от крыш и стен зданий. Вода может извергаться из их пастей далеко за пределы собора, поэтому стены и фундамент защищены от разрушения. | |||
71478. | Словарь понятий. Литература | 2.09 MB | |
Аврелий Августин (354 - 430) - христианский теолог и философ, внес неоценимый вклад в разработку проблемы времени. Его биография хорошо известна благодаря написанной им книге «Исповедь», имеющий автобиографический характер. В своем учении Аврелий Августин следовал неоплатонизму... | |||
71480. | УГОЛОВНЫЙ ПРОЦЕСС: ПРАКТИКУМ | 187.63 KB | |
Следователь отказал в удовлетворении этого ходатайства на том основании что защитником обвиняемого не может быть его близкий родственник. Следует ли всех допрашивать в качестве свидетелей Что такое пределы уголовно-процессуального доказывания и каково их значение... | |||
71481. | ПОДГОТОВКА ГАЗОДЫМОЗАЩИТНИКА | 11.59 MB | |
Учебное пособие написано в соответствии с программой дисциплины «Подготовка газодымозащитника», по которой ведется обучение курсантов, слушателей и студентов очной и заочной форм обучения Петербургского университета ГПС МЧС России. | |||
71482. | ТЕОРЕТИЧЕСКИЕ ОСНОВЫ ИНФОРМАЦИОННОГО ОБЩЕСТВА | 1.13 MB | |
В истории развития цивилизации произошло несколько информационных революций преобразований общественных отношений из-за кардинальных изменений в сфере обработки информации. Этот период характеризуют три фундаментальные инновации: переход от механических и электрических средств... | |||
71483. | Микробиология | 527 KB | |
Настоящее учебно-практическое пособие по микробиологии, основам микробиологии, биологии и микробиологии, микробиологии рыбы и рыбных продуктов содержит сведения о морфологии, систематике и физиологии микроорганизмов- бактерий, мицелиальных грибов... | |||