Форум программистов, компьютерный форум CyberForum.ru

Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? - C++

Восстановить пароль Регистрация
 
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 20:05     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #1
Я конечно, понимаю, что на такие вопросы отвечают "почитай книжку". Я читала, честное слово
Конкретно.
Есть функция
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void jacobi ( const unsigned int n, double * const * a, double * d, double * const * v )
/* Вот что про jacobi пишут:
Метод Якоби предназначен для вычисления собственных значений и векторов 
симметричных матриц. Этот алгоритм я взял из "Справочника алгоритмов 
на языке Алгол" ( Уилкинсон, Райнш ) и переписал его на С++. 
Идея метода Якоби состоит в том, чтобы обнулять недиагональные элементы 
вращениями до тех пор, пока они все не обнулятся и получится диагональная матрица. 
После каждого вращения сумма квадратов внедиагональных элементов уменьшается, 
что приводит к сходимости процесса диагональности. В данном алгоритме в первых 
трёх проходах по матрице используется порог tresh ( обнуляются элементы большие 
по модулю, чем порог ), а в следующих проходах обнуляются все элементы подряд. 
Проходов делается не больше 50. В программе: a - это исходная матрица (n*n), 
d - массив (n) cобственных значений, v - массив собственных векторов 
(n указателей на массивы). Переменные c и s - это cos и sin угла поворота. 
В процессе работы наддиагональные элементы будут изменены, но их можно 
восстановить по поддиагональным.*/
,

есть другая фукция (не main), в которой получается массив
C++
1
2
3
 double a[3][3]={{ixx, ixy, ixz}, // массив[ряд][колонка]
                  {ixy, iyy, iyz},
                  {ixz, iyz, izz}};
Очень хотелось бы этот массив сразу после того, как он получился, запихнуть в jacobi. Но если написать сразу после массива
C++
1
2
3
4
5
6
7
{...
...
  double a[3][3]={{ixx, ixy, ixz}, // массив[ряд][колонка]
                  {ixy, iyy, iyz},
                  {ixz, iyz, izz}};
jacobi(3, a);
}
то это не действует. (И не действует не только это...)
Вопрос: как в списке аргументов правильно записать а?
И как записать остальные аргументы, которых у меня нет и быть не может? (потому что они считаются как раз в самой jacobi)

Заранее большое спасибо.

Добавлено через 5 часов 44 минуты
Или хотя бы в какой книжке написано то, что здесь нужно?..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.12.2012, 20:05     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)?
Посмотрите здесь:

Рекурсивная функция и передача аргументов функции C++
C++ error C2661: pow: нет перегруженной функции, принимающей 1 аргументов
C++ процедуры и функции С++(error C2660: input: функция не принимает 2 аргументов)
C++ Функция не принимает 1 аргументов
нет перегруженной функции, принимающей 3 аргументов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 20:09     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #2
Можете заранее указать эти аргументы
C++
1
2
3
4
5
6
7
например
void func (int a=5, int b=3, int c=3);
 
main()
{
func (10, 5);// тут а стало 10 (вместо 3), b стало 5 (вместо 3), c осталось = 3
}
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 20:35  [ТС]     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #3
MaRKerNSK, пример ясен. а вот в функции jacobi так можно поступить только с const unsigned int n (знаю, что n будет равно трём).
А как поступить с массивом? Про него же не напишешь в аргументах типа double a = {1,2,3,4,5}...
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 20:37     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #4
НУ тут можно через разные партотипы функций, можно сделать глобальный масив, а можно обьявить масси с заданными параметрами внутри функции...
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:01  [ТС]     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #5
А можно ссылку на книжку?

Цитата Сообщение от MaRKerNSK Посмотреть сообщение
а можно обьявить массив с заданными параметрами внутри функции...
- внутри какой функции? Той самой, куда его надо впихнуть? Проблема в том, что в массив должны входить значения переменных, которые получаются в той функции, где он впервые объявлен.
То есть:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 функция2(аргументы) //это jacobi
{
        тут проводятся манипуляции с массивом а
}
 
функция1()
{
       ...
       тут сначала ищутся ixx, ixy, iyy и т.д.;
 
       double a = {ixx, iyy, ixy и т.д.};
 
       функция2(???)
}
Добавлено через 2 минуты
И как тут можно использовать прототип?
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 21:03     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #6
Molchunja, Ну дак если ты отправляешь массив на переработку то зачем тебе за его определять?
вот и отпраляй его в функцию а там делай с ним чего душе угодно)) или в чём проблема?

Добавлено через 1 минуту
Цитата Сообщение от Molchunja Посмотреть сообщение
И как тут можно использовать прототип?
Почитайте в интернете, гугл в помощь на эту тему инфы море, я не хочу сейчас тут расписывать выдержки из учебников и статей, извините если не угодил)
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:05  [ТС]     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #7
Цитата Сообщение от MaRKerNSK Посмотреть сообщение
вот и отпраляй его в функцию
Вот с этим-то и проблема!
Как его туда впихнуть?
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 21:11     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #8
а понятно вы е знаете как отправлять массив в функцию то тут просто

C++
1
2
3
4
5
6
7
8
void func (int *arr, int size)
 
int main (void)
{
int array[5];
func (array, 5);
return 0;
}
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:18  [ТС]     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #9
Цитата Сообщение от MaRKerNSK Посмотреть сообщение
func (array, 5);
ну, я вроде так и пишу...
Цитата Сообщение от Molchunja Посмотреть сообщение
jacobi(3, a)
но не работает. А не работает, наверное, потому, что массив у меня double a, а функция jacobi ожидает
Цитата Сообщение от Molchunja Посмотреть сообщение
const unsigned int n, double * const * a,
.
Если в функции jacobi поменять соответствующий аргумент, она перестаёт работать. А как так записать массив, чтобы его описание было похоже на double * const * a, не представляю.

З.Ы. Поменять что-либо в функции jacobi не вариант, потому что она длинная и сложная, а я программирую четвёртый день в жизни.
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 21:21     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #10
Ну так и обьявляй массив Double
C++
1
double array[5];
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:27  [ТС]     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #11
Цитата Сообщение от Molchunja Посмотреть сообщение
double a[3][3]
Именно так и делаю...
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
02.12.2012, 21:34     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #12
А так что вы не сказали что у вас двумерный масив... с ними по другому
C++
1
2
3
4
5
6
7
в функцию так передовать
void func (double array[][10], int size);
 
main (void) 
{
double arr[10][10];
func (arr, 10);
Добавлено через 53 секунды
В данном случае проще использовать вектор) =)
Molchunja
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
03.12.2012, 00:06  [ТС]     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #13
Почему же? Сказала...
В самом первом моём сообщении всё написано: и что массив двумерный, и что в функцию его нельзя передать так, как вы пишете (при замене "double * const * a" на "double a[][3]" функция не работает).

Что за вектор?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 00:20     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)?
Еще ссылки по теме:

Функция не принимает 0 аргументов C++
C++ Функция не принимает 5 аргументов
Функция не принимает 0 аргументов C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
MaRKerNSK
 Аватар для MaRKerNSK
24 / 11 / 1
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 2
03.12.2012, 00:20     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)? #14
Ну сори у мен сейчас 3 часа ночи))) не заметил)) а вектор это
C++
1
2
3
4
5
6
7
8
9
#include <vector>
void  func(std::vector<std::vector<double>>arr);
 
main()
{
std::vector<std::vector<double>>array(10, std::vector<int>(5)) //аналаг double [10][5]
 func (array);
return 0;
}
Yandex
Объявления
03.12.2012, 00:20     Есть функция с кучей аргументов, как её вызвать в другой функции (если половины аргументов у меня нет)?
Ответ Создать тему
Опции темы

Текущее время: 07:50. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru