Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12

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

02.12.2012, 20:05. Показов 2077. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я конечно, понимаю, что на такие вопросы отвечают "почитай книжку". Я читала, честное слово
Конкретно.
Есть функция
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 минуты
Или хотя бы в какой книжке написано то, что здесь нужно?..
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.12.2012, 20:05
Ответы с готовыми решениями:

Как вызвать функцию чужого приложения, как подменить значения аргументов функции?
собственно вопрос первый: мне нужно каким то образом из своей программы/библиотеки вызвать функцию чужого приложения, естессно...

Странное расположение в памяти аргументов функции с неизвестным количество аргументов
Не могу понять, почему такая программа не работает, выдавая segmentation fault после распечатки первой строки: void makeArr(char *str,...

Выполнить расчет функции от двух аргументов при заданных законах изменения аргументов
Выполнить расчет функции от двух аргументов при заданных законах изменения аргументов. Все значения параметров даны для определения типов...

13
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 20:09
Можете заранее указать эти аргументы
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
}
0
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 20:35  [ТС]
MaRKerNSK, пример ясен. а вот в функции jacobi так можно поступить только с const unsigned int n (знаю, что n будет равно трём).
А как поступить с массивом? Про него же не напишешь в аргументах типа double a = {1,2,3,4,5}...
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 20:37
НУ тут можно через разные партотипы функций, можно сделать глобальный масив, а можно обьявить масси с заданными параметрами внутри функции...
0
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:01  [ТС]
А можно ссылку на книжку?

Цитата Сообщение от 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 минуты
И как тут можно использовать прототип?
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 21:03
Molchunja, Ну дак если ты отправляешь массив на переработку то зачем тебе за его определять?
вот и отпраляй его в функцию а там делай с ним чего душе угодно)) или в чём проблема?

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

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;
}
0
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:18  [ТС]
Цитата Сообщение от MaRKerNSK Посмотреть сообщение
func (array, 5);
ну, я вроде так и пишу...
Цитата Сообщение от Molchunja Посмотреть сообщение
jacobi(3, a)
но не работает. А не работает, наверное, потому, что массив у меня double a, а функция jacobi ожидает
Цитата Сообщение от Molchunja Посмотреть сообщение
const unsigned int n, double * const * a,
.
Если в функции jacobi поменять соответствующий аргумент, она перестаёт работать. А как так записать массив, чтобы его описание было похоже на double * const * a, не представляю.

З.Ы. Поменять что-либо в функции jacobi не вариант, потому что она длинная и сложная, а я программирую четвёртый день в жизни.
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 21:21
Ну так и обьявляй массив Double
C++
1
double array[5];
0
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
02.12.2012, 21:27  [ТС]
Цитата Сообщение от Molchunja Посмотреть сообщение
double a[3][3]
Именно так и делаю...
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
02.12.2012, 21:34
А так что вы не сказали что у вас двумерный масив... с ними по другому
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 секунды
В данном случае проще использовать вектор) =)
0
0 / 0 / 0
Регистрация: 01.12.2012
Сообщений: 12
03.12.2012, 00:06  [ТС]
Почему же? Сказала...
В самом первом моём сообщении всё написано: и что массив двумерный, и что в функцию его нельзя передать так, как вы пишете (при замене "double * const * a" на "double a[][3]" функция не работает).

Что за вектор?
0
 Аватар для MaRKerNSK
24 / 11 / 0
Регистрация: 26.11.2012
Сообщений: 110
Записей в блоге: 8
03.12.2012, 00:20
Ну сори у мен сейчас 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.12.2012, 00:20
Помогаю со студенческими работами здесь

Выполнить расчет функции от двух аргументов при заданных законах изменения аргументов
Выполнить расчет функции от двух аргументов при заданных законах изменения аргументов. Все значения параметров даны для определения типов...

Отсутствуют экземпляры перегруженная функция "pow", соответствующие списку аргументов типы аргументов: (<unknown-type>, double)
#include &lt;stdio.h&gt; #include &lt;math.h&gt; #include &lt;iostream&gt; int main() { double x, y, z, a, b; setlocale(LC_ALL,&quot;rus&quot;); ...

Если функция не принимает аргументов, то принято ли писать в её заголовке void?
Если функция не принимает аргументов, то принято ли писать в её заголовке void? Например, вместо: int F() писать: int F(void)

Обьясните почему нет аргументов в функции
Есть интересный кусок кода, но не понятно почему функции: MyFunction, MyDerivative. My2Derivative, имеют аргумент double x, но при их...

Нет перегруженной функции, принимающей 2 аргументов
Оговорюсь сразу, что я новичок в программировании, надеюсь на Вашу помощь. Базовый класс: Контейнер(название и кол-во элементов) ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru