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

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

02.12.2012, 20:05. Показов 2052. Ответов 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 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru