Треугольные правые матрицы A и B, размерности представлены в виде одномерных массивов размерностью , то есть без нулей под главной диагональю.
Требуется: Получить в таком же виде AB, не меняя представления матриц.
P.S. Сами понимаете, что мне сие - без нужды.))) Ho вот любимая племянница просила помочь...
Алгоритм надобен, a точнее - хорошие мозги)))
Алгоритм надобен, a точнее - хорошие мозги)))
Последний раз редактировалось Natrix 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Natrix, a как быть c тем, что результирующая матрица не будет иметь вид, как две исходные? T.e. там будет больше, чем N*(N+1)/2 ненулевых эелементов
Последний раз редактировалось Soul 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Soul писал(а):Source of the post
Natrix, a как быть c тем, что результирующая матрица не будет иметь вид, как две исходные? T.e. там будет больше, чем N*(N+1)/2 ненулевых эелементов
Этого не может быть.
Последний раз редактировалось AV_77 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Эм, может я совсем уже забыл, как перемножаются матрицы, но у меня вышло (при возведении предыдущей матрицы в квадрат):
Мы ведь перемножаем столбец первой на строку втооой...?
Последний раз редактировалось Soul 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Soul писал(а):Source of the post
Эм, может я совсем уже забыл, как перемножаются матрицы, но у меня вышло (при возведении предыдущей матрицы в квадрат):
Мы ведь перемножаем столбец первой на строку втооой...?
Просто матрица не треугольная. Доджно быть :
A перемножается строка первой на столбец второй.
Последний раз редактировалось AV_77 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Код: Выбрать все
type
TMatrix = class
private
elems : array of integer;
cnt, n : word;
public
constructor create(const n : word);
destructor destroy;override;
procedure set(x,y : word; val : integer);
function get(x,y; word) : integer;
end;
constructor TMatrix.create(const n : word);
begin
cnt:=n*n;
self.n:=n;
setlength(elems,cnt);
end;
destructor TMatrix.destroy;
begin
cnt:=0;
setlength(elems,cnt);
end;
procedure TMatrix.set(x,y : word; val : integer);
var before, m : word;
begin
if (y>x)or(x>n)or(y>n) then exit;
before:=0;
if y>0 then before:=(n+(n-y+1))*y div 2;
m:=before+x-y;
elems[m]:=val;
end;
function TMatrix.get(x,y; word) : integer;
var before, m : word;
begin
if (y>x)or(x>n)or(y>n) then
begin
result:=0;
exit;
end;
before:=0;
if y>0 then before:=(n+(n-y+1))*y div 2;
m:=before+x-y;
result:=elems[m];
end;
Честно скажу, на компиляторе пока код не проверял. Ho идея примерно такая. Дальше умножение 2-х матриц - обычный пробег вложенными циклами.
Последний раз редактировалось Soul 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Soul писал(а):Source of the post
Честно скажу, на компиляторе пока код не проверял. Ho идея примерно такая. Дальше умножение 2-х матриц - обычный пробег вложенными циклами.
Дабы избежать оверквотинга, код я "застрелил".
Задача предложена в курсе самостоятельного изучения Паскаля (в версии Турбо за номером 7).
Иными словами, ни o каких классах речи не идет. Мне, собственно, даже код не нужен - важен алгоритм получения произведения матриц, заданных столь извращенным способом.
Последний раз редактировалось Natrix 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Ну так, вроде, самое сложное в столь извращенном способе задания матриц - найти соответствие между двумерными координатами квадратной матрицы и одномерной координатой элемента массива. Эта часть, вроде, неплохо видна в примере.
ЗЫ Если не нужно делать несколько экземпляров класса, то любой класс достаточно просто переписывается в модуль.
ЗЫ Если не нужно делать несколько экземпляров класса, то любой класс достаточно просто переписывается в модуль.
Последний раз редактировалось Soul 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
И всё же?...
Соотношение между координатами, предположим, есть.
A что дальше?
Когда мы перемножаем матрицы "как матрицы" - есть четкий алгоритм получения каждого элемента:
A тут как быть?
P.S. (Скажу честно, если бы не огромные кипы бумаг, которые каждый день ждут меня на работе, я бы поломал голову над этой задачей. Ho, увы, нет ни сил, ни времени. Да и навыки решения подобных задач - не на уровне).
Соотношение между координатами, предположим, есть.
A что дальше?
Когда мы перемножаем матрицы "как матрицы" - есть четкий алгоритм получения каждого элемента:
A тут как быть?
P.S. (Скажу честно, если бы не огромные кипы бумаг, которые каждый день ждут меня на работе, я бы поломал голову над этой задачей. Ho, увы, нет ни сил, ни времени. Да и навыки решения подобных задач - не на уровне).
Последний раз редактировалось Natrix 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Алгоритм надобен, a точнее - хорошие мозги)))
Natrix писал(а):Source of the post
Соотношение между координатами, предположим, есть.
A тут как быть?
Может чего-то не понял, но в данном случае все просто:
Последний раз редактировалось malk 30 ноя 2019, 12:21, всего редактировалось 1 раз.
Причина: test
Причина: test
Вернуться в «Computer Science»
Кто сейчас на форуме
Количество пользователей, которые сейчас просматривают этот форум: нет зарегистрированных пользователей и 4 гостей