Форум программистов, компьютерный форум, киберфорум
C/С++ под Linux
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/12: Рейтинг темы: голосов - 12, средняя оценка - 4.67
 Аватар для Visary_Master
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296

Работа с обсчетом членов ряда потоками

04.10.2011, 01:02. Показов 2522. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Помогите пожалуйста разобраться.
Задача такая:
Обсчитать сумму ряда по частям, с помощью потоков. Каждый поток считает свою часть ряда, и в итоге главный поток возвращает всю сумму. Вроде бы все правильно, но почему криво считает.
К примеру:

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
#include <iostream>
#include <wait.h>
#include <math.h>
using namespace std;
 
float calcSum(float);   // прототип функции вычисления суммы
int n = 0;              // количество потоков
 
struct thread_arg
{
    float sum;  // сумма
    int id;     // id потока
    int start;  
    int end;
    int kol;    // количество членов ряда, которые нужно обсчитать
};
// потоковая функция
void *thread_f (void *arg)
{
    struct thread_arg *targ = (struct thread_arg*) arg;
    int id_t = targ->id; // id текущего потока
    cout << "id-------------------------------------"<< id_t <<endl;
    float s = 0.0;
    for (int i=targ->start; i<targ->end; i++)
    {
        float a = i;
        float b = i+1;
        s += a/b;
    }
    targ->sum = s;
    cout <<"schital s "<< (targ->start) <<" po "<< (targ->end) <<endl;
    cout <<"summa chasti "<< targ->sum <<" moi id "<< id_t << endl;
}
 
int main() 
{
    struct thread_arg *targ1;
    
    cout << "Enter the amount of pthread" << endl;
    cin >> n;               // вводим кол-во потоков
    cout << "Entre the term amount value of sum" << endl;
    cin >> targ1->kol;      // вводим кол-во членов ряда
    
    int step = (targ1->kol-targ1->kol%n)/n; // вычисляем шаг
    int ost = targ1->kol%n;                 // вычисляем остаток
    
    int start = 0;      
    int end = step;
    
    pthread_t thread[n];
    thread_arg num[n];
    
    for (int i=0; i<=n, end<=targ1->kol; i++, start+=step, end+=step)
    { 
        num[i].id = i;        // передаем id потока
        num[i].start = start; // передаем начало части ряда
        num[i].end = end + 1; // передаем конец части ряда
    
        pthread_create(&thread[i], NULL, &thread_f, &num[i]);
    
        if (ost > 0)
        {
            start++;
            end++;
            ost--;
        }
        sleep(1);
    }
    float totalSum = 0.0;
    for (int i=0; i<n; i++)
    {
        pthread_join(thread[i],NULL);
        totalSum += num[i].sum;
    }
    cout << "summa "<< totalSum << endl; 
return 0;
}
Почему с 7го по 11й? Просто уже запутался... но спать нельзя.
Миниатюры
Работа с обсчетом членов ряда потоками  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.10.2011, 01:02
Ответы с готовыми решениями:

Найти сумму членов ряда. На экран вывести значение суммы, число членов ряда, вошедших в сумму, и последний член ряда
Помогите пожалуйста с заданием .

Определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда
Помогите с программами нужны готовые програмные коды. Темы циклы: 1) Определить число членов ряда, необходимых для расчета с...

Определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда
определить число членов ряда, необходимых для расчета с заданной погрешностью суммы членов ряда: 1-1/3+1/5-1/7+…..: (-1)^N/(2*N+1);...

21
 Аватар для Visary_Master
17 / 18 / 1
Регистрация: 01.12.2010
Сообщений: 296
06.10.2011, 11:46  [ТС]
Студворк — интернет-сервис помощи студентам
Теперь другая проблема, просто написал тест:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#include <iostream>
using namespace std;
 
int main()
{
    float s = 0.0;
    int n = 10  ;
    for (float i=0; i<n; i++)
    {
        
        s += i/(i+1.0);
    }
    cout << s << endl;
    return 0;
}
Сумму считает неверно. Решил выложить весь код.
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
#include <iostream>
#include <wait.h>
#include <math.h>
using namespace std;
 
float calcSum(float);   // прототип функции вычисления суммы
int n = 0;              // количество потоков
 
struct thread_arg
{
    float sum;  // сумма
    int id;     // id потока
    int start;  
    int end;
    int kol;    // количество членов ряда, которые нужно обсчитать
};
 
// потоковая функция
void *thread_f (void *arg)
{
    struct thread_arg *targ = (struct thread_arg*) arg;
    int id_t = targ->id; // id текущего потока
    cout << "id-------------------------------------"<< id_t <<endl;
    float s = 0.0;
    for (int i=targ->start; i<targ->end; i++)
    {
        float a = i;
        float b = i+1;s 
        s += a/b;
    }
    targ->sum = s;
    cout <<"schital s "<< (targ->start) <<" po "<< (targ->end) <<endl;
    cout <<"summa chasti "<< targ->sum <<" moi id "<< id_t << endl;
}
 
int main() 
{
    struct thread_arg targ1;
    
    cout << "Enter the amount of pthread" << endl;
    cin >> n;               // вводим кол-во потоков
    cout << "Entre the term amount value of sum" << endl;
    cin >> targ1.kol;       // вводим кол-во членов ряда
    
    int step = targ1.kol / n;
    int ost = targ1.kol % n;
    
    int start = 0;      
    int end = step-1;
    
    pthread_t thread[n];
    thread_arg num[n];
    
    for (int i=0; i<=n, end<=targ1.kol; i++, start+=step, end+=step)
    { 
    
        num[i].id = i;  
        if (ost > 0)
        { 
            end++;
            num[i].end = end; // передаем конец части ряда 
            num[i].start = start; // передаем начало части ряда
            pthread_create(&thread[i], NULL, &thread_f, &num[i]);
            start++;
            ost--;
        }
        else
        {
            num[i].start = start; // передаем начало части ряда
            num[i].end = end; // передаем конец части ряда
            pthread_create(&thread[i], NULL, &thread_f, &num[i]);
        }
        sleep(1);
    }
    float totalSum = 0.0;
    
    for (int i=0; i<n; i++)
    {
        totalSum += num[i].sum;
    }
    
    for (int i=0; i<n; i++)
    {
        pthread_join(thread[i],NULL);
 
    }
    cout << "summa "<< totalSum << endl; 
return 0;
}
Помогите пожалуйста разобраться, где я ошибся?
0
4866 / 3287 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
07.10.2011, 02:08
Работа с обсчетом членов ряда потоками
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.10.2011, 02:08

Выполнить суммирование членов бесконечного ряда по точности та по колическву членов ряда
Выполнить суммирование членов бесконечного ряда по точности та по колическву членов ряда

Найти сумму четных членов ряда, и произведение нечетных членов ряда
Почему не работает,кто объяснит? Ввести массив А(N) из членов ряда А(i) = i ^ (1 / 3) Число элементов ограничены по условию А(I)...

Найти сумму четных членов ряда и произведение нечетных членов ряда
Пожалуйста, помогите. Задача такая:ввести массив A(N) из члена ряда A(I)=I^(1/3).Число элементов ограничены по условию A(I)&lt;=M,где...

Подсчитать сумму членов ряда и сумме первых 10 членов ряда
Для ряда, члены которого вычисляются по формуле(ниже формула). Подсчитать сумму членов ряда с точностью до 0.000001 и сумму первых 10...

Подсчитать сумму членов ряда с точностью до 0.000001 и сумму первых 10 членов ряда
Добавлено через 10 часов 32 минуты Для ряда, члены которого вычисляются по формуле, соответствующей Вашему индивидуальному заданию,...


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

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru