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. Результаты работы программы нахождения минимального и максимального элементов матрицы, а также ее следа
А также другие работы, которые могут Вас заинтересовать | |||
22257. | АНЕСТЕЗИОЛОГИЧЕСКОЕ ОБЕСПЕЧЕНИЕ У БОЛЬНЫХ С ЦЕРЕБРАЛЬНЫМИ АРТЕРИАЛЬНЫМИ АНЕВРИЗМАМИ | 115.5 KB | |
Эта патология имеет врожденную этиологию однако аневризмы могут возникать и как приобретенная патология развиваясь вторично при дегенеративных процессах; часто встречаются у гипертоников [II] 21 больных с церебральными артериальными аневризмами АА имеют более чем одну аневризму [7]. Примерно 1 3 больных погибают или остаются глубокими инвалидами после первого же кровоизлияния а из оставшихся больных только 1 3 остаются функционально полноценными [9]. предложили клиническую систему градации состояния больных с САК. | |||
22258. | ПРИНЦИПЫ ИНТЕНСИВНОЙ ТЕРАПИИ ПРИ ОСТРЫХ СУБАРАХНОИДАЛЬНЫХ КРОВОИЗЛИЯНИЯХ НЕТРАВМАТИЧЕСКОЙ ЭТИОЛОГИИ | 127 KB | |
Cerebral arterial spasm: a controlled trial of nimodipine in patients with subarachnoid hemorrhage. Clinical vasospasm after subarachnoid hemorrhage: response to hypervolemic hemodilution and arterial hypertension. Intracerebral hemorrhage more than twice as common as subarachnoid hemorrhage. Aspects of the medical management in aneurysmal subarachnoid hemorrhage. | |||
22259. | КОРРЕКЦИЯ АРТЕРИАЛЬНОЙ ГИПЕРТЕНЗИИ В ПРАКТИКЕ ИНТЕНСИВНОЙ ТЕРАПИИ БОЛЬНЫХ С ЧЕРЕПНО-МОЗГОВОЙ ТРАВМОЙ И СОСУДИСТЫМИ ЗАБОЛЕВАНИЯМИ ГОЛОВНОГО МОЗГА | 73.5 KB | |
Повышенное АД традиционно считается неблагоприятным фактором для прогноза заболеваний головного мозга что объясняется несколькими причинами. Кроме того ряд авторов рассматривают артериальную гипертензию как пусковой фактор вазогенного отека мозга изза развития феномена роскошной перфузии . Эти исследователи предполагают что избыточный кровоток в церебральных сосудах может приводить к транскапиллярному переходу жидкой части крови в интерстициальное пространство развитию отека и дислокации мозга [2122]. | |||
22260. | Лечение постперфузионной энцефалопатии | 26 KB | |
У каждого больного после искусственного кровообращения страдает церебральная ауторегуляция и происходит ишемия и отек головного мозга.В первые пять суток после развития потери сознания или судорог терапия должна быть направлена на поддержание нормального давления крайне нежелательна и даже губительна гипертензия и на максимально возможное подавление функциональной активности головного мозга. Падение ликворного давления на 34 сутки может являться результатом вклинения ствола мозга и декомпенсации отека. | |||
22261. | МОЗГОВОЙ КРОВОТОК | 66.5 KB | |
Торакальная и люмбальная порции спинного мозга не имеют в такой степени расширенного кровотока. Цереброваскулярное сосудистое русло постоянно находится под влиянием определенного количества физических и химических стимулов которые алаптируют калибр мозговых сосудов потребностям различных отделов головного мозга в зависимости от их функциональной активности. Конечной целью присходящих процессов яваляется: поддержание и быстрое изменение локального МК в зависимости от метаболической потребности различных отделов головного мозга; обеспечение... | |||
22262. | ИНФЕКЦИОННЫЕ БОЛЕЗНИ (ИБ) | 43.5 KB | |
Легкая форма гриппа характеризуется острым катаром верхних дыхательных путей. Эта форма длится несколько дней и завершается полным выздоровлением. Тяжелая форма гриппа имеет две разновидности: первая связана с резкой интоксикацией вторая легочными осложнениями при присоединении вторичной инфекции. Папулопустулезная форма характеризуется появлением на коже сыпи в виде узелков папула и гнойничков пустула на лице голове шее груди спине. | |||
22263. | КИШЕЧНЫЕ ИНФЕКЦИИ (КИ) | 40.5 KB | |
ДИЗЕНТЕРИЯ ШИГЕЛЛЕЗ острое кишечное инфекционное заболевание с поражением толстой кишки и признаками интоксикации антропоноз. Шигеллы размножаются в энтероцитах толстой кишки что ведет к некрозу клеток. Местные изменения развиваются в слизистой толстой кишки в основном в прямой и сигмовидной что проявляется дизентерийным колитом. Просвет кишки сужен. | |||
22264. | Совершенствование системы документооборота в ООО «РАЙЖИВСОЮЗ» | 242 KB | |
Дать определение понятия «документооборот», определить какие существуют виды документооборота, и какие функции они выполняют. Разобрать теоретические аспекты данной темы; Дать полную характеристику организации (ООО «РАЙЖИВСОЮЗ»), на основе которой будет выполняться данная курсовая работа; Предложить методы совершенствования существующей системы документооборота организации, показать и доказать их экономическую эффективность. | |||
22265. | ОПУХОЛИ СИСТЕМЫ КРОВИ (ГЕМОБЛАСТОЗЫ) | 39 KB | |
Это происходит следующим образом: сначала лейкозные клетки разрастаются в органах кроветворения красный костный мозг селезенка лимфоузлы затем происходит выход лейкозных клеток в кровь где их можно обнаружить в большом количестве на следующем этапе который рассматривается как метастазирование лейкозные клетки из крови попадают в органы и образуют лейкозные инфильтраты по ходу сосудов в строме что ведет к атрофии и дистрофии органа. лейкозные клетки вытесняют нормальные клетки крови эритроциты лейкоциты тромбоциты... | |||