![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 20
|
![]()
Доброго времени суток, форумчане!
Задали задачу: сделать функцию, которая будет считать сумму/разность матриц и умножать матрицу на число, при этом выбирать что именно сделать она должна на основе передаваемых параметров. Все было бы легко и просто, если не пару "но": - циклов должно быть всего два (во вложенном будут все действия происходить) - запрещены операторы ветвления и выбора. Язык - Си, не плюсы. У кого-нибудь есть идеи? ![]() |
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
![]()
Идея есть - над тобой жестоко глумятся или твой препод идиот!
"адали задачу: сделать функцию, которая будет считать сумму/разность матриц и умножать матрицу на число, при этом выбирать что именно сделать" Тут то и загвоздка - как выбирать без ветвления? Я бы просто посмеялся над таким заданием! if кстати - это выбор? ![]()
Если я помог вам - порадуйте меня, нажмите на весы слева
![]() |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 20
|
![]()
If - выбор =) Кстати можно сделать и без него (через условие в цикле), но такой вариант не прошел.
|
![]() |
![]() |
![]() |
#4 | |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
![]() Цитата:
не я не представляю язык программирования без выбора и условий, задание издевка наверн :D
Если я помог вам - порадуйте меня, нажмите на весы слева
![]() |
|
![]() |
![]() |
![]() |
#5 |
Пользователь
Регистрация: 28.10.2009
Сообщений: 20
|
![]()
Так обойтись полностью без условий просто нереально (иначе как проверять на выход за пределы массива? Заперет услвий распространяется только на какое-то мистическое определение нужного варианта действа). Перегрузка функции может подойти? (имя функции-то одно, но список аргументов будет разный)
|
![]() |
![]() |
![]() |
#6 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
В C (чистом, без плюсов) нет перегрузки функций.
void Foo( double k1, double k2, int nCols, int nRows, double* A, double* B, double d, double* C); C=(A+(k1⋅B))⋅(k2⋅d) При k1 = 0; k2 = 1. получаем умножение на число d; при k1 = 1.; k2 = 0 - сложение матриц; при k1 = -1.; k2 = 0 - вычитание. Чтобы обойтись двумя циклами нужно знать, как матрица хранится в памяти и что такое "приведенный индекс". Последний раз редактировалось Vago; 30.01.2010 в 17:35. |
![]() |
![]() |
![]() |
#7 | |
Пользователь
Регистрация: 28.10.2009
Сообщений: 20
|
![]()
Большое спасибо! Выручил)
Цитата:
|
|
![]() |
![]() |
![]() |
#8 | |
Форумчанин
Регистрация: 13.12.2009
Сообщений: 272
|
![]() Цитата:
![]()
Если я помог вам - порадуйте меня, нажмите на весы слева
![]() |
|
![]() |
![]() |
![]() |
#9 |
Форумчанин
Регистрация: 15.01.2010
Сообщений: 948
|
![]()
Пардон, тут ещё, конечно, нужно к-во столбцов матрицы B в параметры добавить:
void Foo( double k1, double k2, int nRowsA, int nColsA, int nColsB, double* A, double* B, double d, double* C ); Но алгоритм от этого не поменяется. |
![]() |
![]() |
![]() |
#10 | |
Пользователь
Регистрация: 28.10.2009
Сообщений: 20
|
![]() Цитата:
k1 = 1, k2 = 0 т.о. (Aij+Bij)⋅(0⋅d) -> (Aij+Bij)⋅0, что в итоге приведет к обнулению результата. Но все равно спасибо, Vago, выручил ты меня очень =) |
|
![]() |
![]() |
![]() |
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Арифметические действия над матрицами и транспонирование | Axel1981 | Помощь студентам | 14 | 12.06.2010 20:20 |
Действия над массивами | hen | Помощь студентам | 2 | 06.06.2009 23:34 |
Действия над матрицами. (Delphi) | ekzobyte | Помощь студентам | 1 | 20.05.2009 20:52 |