Найти скалярное произведение двух строк матрицы - 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]и значение результата. - Программа ожидает нажатия пользователем любой клавиши, чтобы закрыться.