Найти скалярное произведение двух строк матрицы - Pascal
Формулировка задачи:
На внешнем носителе (в файле) построчно подготовлены элементы матрицы А(m,n). Для заданных k и l ввести элементы k-й и l-й строк (пропуская промежуточные) и найти их скалярное произведение. матрица слишком велика, чтобы хранить ее в памяти.
Решение задачи: «Найти скалярное произведение двух строк матрицы»
textual
Листинг программы
- const n = 500; //ну например...
- m = 100000; //кто ж знает, какие там у Вас m, n
- fname = 'big.txt';
- var i, j, k, l, t, c: integer; //исправлено
- r: array[1..n] of real;
- f: text;
- begin
- for i := 1 to n do r[i] := 1;
- write('k in [1..', m, ']; k = ');
- readln(k);
- write('l in [1..', m, ']; l = ');
- readln(l);
- c := 0; //исправлено
- assign(f, fname);
- reset(f);
- for i := 1 to m do
- begin
- if (i = k) or (i = l)
- then begin
- for j := 1 to n do
- begin
- read(f, t);
- r[j] := r[j] * t
- end;
- inc(c)
- end;
- readln(f);
- if c >= 2 then break //исправлено
- end;
- close(f);
- for i := 2 to n do r[1] := r[1] + r[i];
- write('A[', k, '] * A[', l, ' = ', r[1]);
- readln
- end.
Объяснение кода листинга программы
- Устанавливаются константы
n
иm
равные 500 и 100000 соответственно. - Задаётся строковая переменная
fname
и присваивается значениеbig.txt
. - Задаются переменные
i
,j
,k
,l
,t
,c
типа integer. - Создаётся массив
r
с размерностью от 1 доn
элементов типа real. - Открывается файл
big.txt
и считывается с него информация. - Происходит внешний цикл по переменной
i
от 1 доm
. - Внутри внешнего цикла происходит условная конструкция вида
если i равно k или l, то
. - Внутри условной конструкции выполняется вложенный цикл по переменной
j
от 1 доn
. - Считывается значение из файла в переменную
t
и умножается на соответствующий элемент массиваr
. - Увеличивается значение переменной
c
на 1. - Проверяется условие `если c больше или равно 2, то цикл прерывается.
- Файл закрывается.
- Выполняется цикл по переменной
i
от 2 доn
и все элементы массиваr
складываются в первый элемент. - Выводится результат умножения двух строк матрицы
A[k] * A[l]
и значение результата. - Программа ожидает нажатия пользователем любой клавиши, чтобы закрыться.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д