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

Передать параметр в функцию

01.03.2016, 18:54. Показов 575. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Не могу передать параметр в функцию с помощью функции
C++
1
2
pthread_create(&thread2,NULL,Determinant, (void *) &b); 
  pthread_create(&thread2,NULL,Determinant, (void *) &c);
Помогите пожалуйста

Программа должна многопоточно рассчитывать определитель матрицы

Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
#include <pthread.h>
using namespace std;
 int **mas;
 int d;
 
struct bound //структура, определяющая границы вычислений потоков
{ int begin ; int end ; } ;
 
  bound b ; //границы вычислений для первого потока
  bound c ; //границы вычислений для второго потока
 
// Функция вывода матрицы
void PrintMatr (int **mas, int m) {
  int i,j;
  for(i=0;i<m;i++) {
    for(j=0;j<m;j++)
      cout << mas[i][j] << " ";
    cout << endl;
  }
}
// Получение матрицы без i-й строки и j-го столбца
void GetMatr(int **mas, int **p,int i,int j,int m) {
  int ki,kj,di,dj;
  di=0;
  for(ki=0;ki<m-1;ki++) { // проверка индекса строки
    if (ki==i)  di=1;
    dj=0;
    for(kj=0;kj<m-1;kj++) { // проверка индекса столбца
      if (kj==j)  dj=1;
      p[ki][kj]=mas[ki+di][kj+dj];
    }
  }
}
// Рекурсивное вычисление определителя
int Determinant(int **mas, int m,  void *param) {
  bound *b = (bound *)param ; //преобразование из void* в bound*
   int i,j,k,n;
  int **p;
  p = new int* [m];
  for(i=0;i<m;i++)
    p[i] = new int[m];
  j=0; d=0;
  k=1; //(-1) в степени i
  n=m-1;
  if (m<1)  cout << "Определитель вычислить невозможно!" << endl;
  if (m==1) {
    d = mas[0][0];
    return(d);
  }
  if (m==2) {
    d=mas[0][0]*mas[1][1]-(mas[1][0]*mas[0][1]);
    return(d);
  }
  if (m>2){
 
    for (i = b->begin; i < b->end; i++) {
      GetMatr(mas,p,i,0,m);
      cout << mas[i][j] << endl;
      PrintMatr(p,n);
      d = d + k * mas[i][0] * Determinant(p,n, param);
      k=-k;
    }
  }
  return(d);
}
 
// Основная функция
int main() {
  int m, i, j;
  
 
  system("chcp 1251");
  system("cls");
  cout << "Введите размерность квадратной матрицы: ";
  cin >> m;
  mas = new int* [m];
  for(i=0;i<m;i++) {
    mas[i] = new int[m];
    for(j=0;j<m;j++) {
      cout << "mas[" << i << "][" << j << "]= ";
      cin >> mas[i][j];
    }
  }
 
    pthread_t thread1, thread2;//идентификаторы для созданных потоков
    b.begin = 0; //Диапазоны вычислений для thread1 потока
    b.end   = m/2;
    pthread_create(&thread1,NULL,Determinant,  (void *) &b);//создание первого потока
    c.begin =m/2+1; //Диапазоны вычислений для thread2 потока
    c.end   = m;
    pthread_create(&thread2,NULL,Determinant, (void *) &c); //создание второго потока
 
    pthread_join(thread1, NULL); //ожидание завершения первого потока, в retu1 записывается адрес просто числа 10;
    pthread_join(thread2, NULL);
 
  PrintMatr(mas, m);
  cout << "Определитель матрицы равен " << d;
  cin.get(); cin.get();
  return 0;
}
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.03.2016, 18:54
Ответы с готовыми решениями:

Как передать параметр в функцию?
void Delete(Computer *pcomputer) { unsigned int RemoveComputer; int NumberCopy; NumberCopy = NumberOfComputers; cout &lt;&lt;...

Передать функцию как параметр
По сути, нужно отсортировать созданный массив, то есть передаваемой функцией будет функция сортировки. Подскажите как это реализовать. ...

Как передать параметр в функцию?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; using namespace std; void test(int); int main() { int n = 1; for (int i = 0; i &lt;...

4
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
01.03.2016, 19:48
3й параметр в pthread_create должен быть void * (void *)
0
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 124
01.03.2016, 20:27  [ТС]
С точки зрения "правилом этики программирования" я правильно сделал, что сделал отдельную функцию void из ее вызываю int для того чтоб int возвращала значения.
Рассчитать определитель матрицы многопоточно
0
Эксперт С++
516 / 421 / 92
Регистрация: 23.09.2010
Сообщений: 1,165
01.03.2016, 20:33
Где вы видите функцию void в вашем коде, простите?
Ваша функция Determinant может и работает правильно, я не знаю, но ее нельзя передать в поток, потому что она отличается по сигнатуре, т.е. по типу и количеству параметров и по типу возвращаемого значения от сигнатуры функции, которая передается в pthread_create
0
0 / 0 / 0
Регистрация: 02.08.2015
Сообщений: 124
01.03.2016, 21:41  [ТС]
gooseim, перейдите по ссылочке, моей теме в форуме-> Рассчитать определитель матрицы многопоточно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.03.2016, 21:41
Помогаю со студенческими работами здесь

Передать метод, как параметр, в функцию
Добрый день. Есть функция, которая должна в качестве параметра принимать указатель на метод класса. Причем сам метод может быть обычным,...

Как в функцию передать параметр - двухмерный массив
void max_el() { int i,j,max; for ( i=1 ; i&lt;=n; i++) for ( j=1; j&lt;=m; j++) //nahodim maksimalnii element...

В разработанную пользовательскую функцию параметр-массив передать двумя способами:
Как переделать код, чтоб соответствовало заданию: В разработанную пользовательскую функцию параметр-массив передать двумя способами: ...

Можно ли передать указатель на функцию как параметр другой функции?
В общем, вопрос. Можно ли, допустим ... int fun1(int x) { ... ... ... return x*1000; }

г-но код или можно ли передать метку (от гоуту) в функцию как параметр?
Собственно вопрос в заголовке, даже не знаю как это мне в голову пришло, но все же интересно xD


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru