Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебник.docx
Скачиваний:
36
Добавлен:
21.12.2018
Размер:
2.15 Mб
Скачать

Умножение матриц

Задача:

Три продавца продают четыре вида товаров. Количество продаваемого товара сведено в таблицу A.

Алгоритм решения задачи:

В таблице B представлены цена каждого товара и комиссионные (наценка), получаемые от продажи.

Вырученные от продажи деньги подсчитываются так:

1-й продавец: 5 * 20.30 + 3 * 18.60 + 7 * 12.10 + 0 * 23.00 = 242.00

2-й продавец: 7 * 20.30 + 1 * 18.60 + 9 * 12.10 + 2 * 23.00 = 315.60

3-й продавец: 3 * 20.30 + 4 * 18.60 + 7 * 12.10 + 6 * 23.00 = 358.00

А полученные комиссионные так:

1-й продавец: 5 * 1.60 + 3 * 1.30 + 7 * 1.00 + 0 * 1.80 = 18.90

2-й продавец: 7 * 1.60 + 1 * 1.30 + 9 * 1.00 + 2 * 1.80 = 25.10

3-й продавец: 3 * 1.60 + 4 * 1.30 + 7 * 1.00 + 6 * 1.80 = 27.80

Эти вычисления называются умножением матриц и записываются так, как представлено на рисунке выше.

Число столбцов таблицы A должно совпадать с числом строк таблицы B. Результирующая таблица C имеет столько строк, сколько у A, и столько столбцов, сколько у B.

Следующая программа вводит матрицы A и B, перемножает эти матрицы и затем печатает их произведение – матрицу C:

Программа на языке Паскаль:

type

atype = array[1..3,1..4] of integer;

btype = array[1..4,1..2] of real;

ctype = array[1..3,1..2] of real;

var

a: atype; b: btype; c: ctype;

n,i,j,k: integer;

begin

for n := 1 to 3 do

readln(a[n,1],a[n,2],a[n,3],a[n,4]);

for n := 1 to 4 do

readln(b[n,1],b[n,2]);

for i := 1 to 3 do

for j := 1 to 2 do begin

c[i,j] := 0;

for k := 1 to 4 do

c[i,j] := c[i,j] + a[i,k] * b[k,j];

end;

for n := 1 to 3 do

writeln(c[n,1]:8:2, c[n,2]:8:2);

readln

end.

Удаление элементов одномерного массива

Задача:

Допустим, имеется одномерный массив, содержащий числа от 0 до 49 включительно. Требуется исключить из него все элементы, значения которых меньше 15.

Алгоритм решения задачи:

Присваивание значение n переменной m требуется, т.к. n - константа и не может быть изменена. Поскольку при "просмотре" массива в цикле while некоторые элементы будут удаляться, то значение m, обозначающее длину массива, будет уменьшаться.

Если очередной элемент не удаляется, то переходим к просмотру следующего элемента (i := i + 1) и не уменьшаем массив (m не меняется).

Программа на языке Паскаль:

const n = 20;

var

arr: array[1..n] of integer;

i, j, m: integer;

begin

randomize;

for i := 1 to n do begin

arr[i] := random(50);

write(arr[i]:4);

end;

m := n;

i := 1;

while i <= m do

if arr[i] < 15 then begin

for j := i to m - 1 do

arr[j] := arr[j+1];

m := m - 1

end

else

i := i + 1;

for i:= 1 to m do

write(arr[i]:4);

readln

end.

Выбор элементов массива

Задача:

Требуется из одного массива скопировать в другой массив значения, удовлетворяющие определенным условиям и посчитать их количество.

Алгоритм решения задачи:

Допустим, у нас будет исходный массив из 50 элементов, значения которых формируются функцией random и лежат в диапазоне от -50 до 49 включительно. Условием, при котором значения одного массива должны быть скопированы в другой, будет попадание значения в диапазон от -5 до 5 включительно.

Программа на языке Паскаль:

const

m = 50;

type

arr = array[1..m] of shortint;

var

arr1, arr2: arr;

k, i: byte;

begin

randomize;

writeln ('Исходный массив: ');

for i := 1 to m do begin

arr1[i] := random(100)-50;

write (arr1[i]:4);

end;

writeln; writeln;

k := 0;

for i := 1 to m do

if (arr1[i] >= -5) and (arr1[i] <= 5) then begin

k := k + 1;

arr2[k] := arr1[i];

end;

write ('Отфильтрованный массив: ');

for i := 1 to k do

write (arr2[i]:3);

writeln;

writeln ('Количество элементов: ', k);

readln

end.

Примечания:

В переменной k хранится количество элементов второго массива, а также она используется при занесении очередного удовлетворяющего условию элемента в массив.