Задача 1.
Дана матрица NxM, состоящая из натуральных чисел. Выбрать в строках самые левые наименьшие элементы и поставить их в первый столбец. Для решения этой задачи нужно сначала найти самый левый минимальный элемент в строке и запомнить его местоположение, а затем поменять его местами с элементом в первом столбце.
Переменные:
a – двумерный массив;
n, m – количество строк и столбцов массива;
i, j – переменные цикла;
jm – столбец минимального элемента для каждой строки;
min – текущий минимум.
Алгоритм решения задачи:
- вводим размеры массива А и значения его элементов;
- просматриваем строки массива слева направо, ищем минимальное значение и запоминаем значения индексов;
- для каждой строки меняем местами минимальный элемент и элемент в первом столбце;
- выводим матрицу на экран.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
const t=100; s=100; var a : array [1..t,1..s] of integer; n, m, jm, i, j, min : integer; begin write('Введите количество строк n='); readln(n); write('Введите количество столбцов m='); readln(m); for i:=1 to n do begin write('Вводите через пробел', m,'чисел'); for j:=1 to m do read(a[i,j]); end; for i:=1 to n do begin min:= a[i,1]; jm:=1; for j:=1 to m do if min > a[i,j] then begin jm:=j; min:=a[i,j]; end; a[i,jm]:=a[i,1]; a[i,1]:=min; end; for i:=1 to n do {вывод матрицы на экран в виде таблицы} begin for j:=1 to m do write(a[i,j]:4); writeln; end end. |
Задача 2.
Дана квадратная матрица NxN, состоящая из натуральных чисел. Зеркально отразить ее элементы относительно побочной диагонали. Вывести результат на экран.
Рассмотрим матрицу 3×3 и посмотрим, что происходит с элементами при зеркальном отображении:
1 2 3 |
A11 A12 A13 A33 A23 A13 A21 A22 A23 <-> A32 A22 A12 A31 A32 A33 A31 A21 A11 |
Если считать, что после преобразования у нас появилась новая матрица B, то соответствие между элементами устанавливается следующим образом:
1 2 3 4 |
B11 <-> A33 B12 <-> A23 B21 <-> A32 B22 <-> A22 и т.д., т.е. B[I,J] <-> A[L,M] |
Внимательно изучив соответствие, можно утверждать, что для элементов матрицы NxM справедлива следующая система уравнений:
1 2 |
I+M = N+1, J+L = N+1. |
Отсюда правило преобразования элементов выглядит следующим образом:
1 |
B[I,J] = A[N+1-J,N+1–I]. |
Переменные:
a, b – двумерные массивы;
m – количество строк и столбцов массива;
i, j – переменные цикла;
k– вспомогательная переменная.
Алгоритм решения задачи:
- вводим размеры массива A и присваиваем значения его элементам;
- присваиваем значения элементам матрицы B по представленным выше формулам и выводим их на экран.
Программа, решающая данную задачу, выглядит так:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
const n=100; var a,b : array [1..n] of integer; k, m, i, j : integer; begin write('Введите размер матрицы m='); readln(m); writeln('Исходная матрица'); k:=1; for i:=1 to m do for j:=1 to m do begin a[i,j]:=k; k:=k+1; if j |
Задача 3.
Вычислить:
а) С = A + B
Создадим две процедуры:
1) tab_in ( var a1 : mas ) – для ввода элементов массива с клавиатуры. Параметр а1 – формируемый массив;
2) tab_out ( var b1 : mas ) – для вывода массива на экран. Параметр b1 – имя выводимого массива.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
type mas=array [1..40,1..40] of real; vec=array[1..40] of real; var a,b,c : mas; x,y : vec; i, j, n, k : integer; r, s : real; procedure tab_in(var a1 : mas); var i, j : integer; begin for i:=1 to n do for j:=1 to n do read(a1[i,j]); writeln; end; |
1 2 3 4 5 6 7 8 9 10 |
procedure tab_out(var b1 : mas); var i,j:integer; begin for i:=1 to n do begin for j:=1 to n do write(b1[i,j]:7:3); writeln; end; end; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
begin writeln('Введите размер матрицы'); readln(n); writeln('Введите матрицу A'); tab_in(a); writeln('Введите матрицу B'); tab_in(b); writeln('Матрица A'); tab_out(a); writeln('Матрица B'); tab_out(b); for i:=1 to n do for j:=1 to n do c[i,j]:=a[i,j]+b[i,j]; writeln('Полученная матрица C=A+B'); tab_out(c); end. |
б) y = A * x
Основная программа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
begin writeln('Введите размер матрицы'); readln(n); writeln('Введите матрицу A'); tab_in(a); writeln('Введите вектор x'); for i:=1 to n do read(x[i]); writeln; writeln('Матрица A'); tab_out(a); writeln('Введенный вектор x'); for i:=1 to n do write(x[i]:7:2); writeln; for i:=1 to n do begin s:=0; for j:=1 to n do s:=s+A[i,j]*x[j]; y[i]:=s end; writeln('Полученный вектор y=A*x'); for i:=1 to n do write (y[i]:7:3); writeln; end. |
в) С = A * B
Основная программа
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
begin writeln('Введите размер матрицы'); readln(n); writeln('Введите матрицу A'); tab_in(a); writeln('Введите матрицу B'); tab_in(b); writeln('Матрица A'); tab_out(a); writeln('Матрица B'); tab_out(b); for i:=1 to n do for j:=1 to n do begin s:=0; for k:=1 to n do s:=s+a[i,k]*b[k,j]; c[i,j]:=s; end; writeln('Полученная матрица C=A+B'); tab_out(c); end. |
г) транспонированную матрицу B
Основная программа:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
begin writeln('Введите размер матрицы'); readln(n); writeln('Введите матрицу B'); tab_in(b); writeln('Матрица B'); tab_out(b); for i:=1 to n–1 do for j:=i+1 to n do begin r:=b[i,j]; b[i,j]:=b[j,i]; b[j,i]:=r; end; writeln; writeln('Полученная транспонированная матрица B'); tab_out(b); end. |