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

Переделать код, изменить алгоритм и тип элемента данных

19.06.2022, 10:43. Показов 471. Ответов 8
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Задание. Реализовать и распараллелить с помощью OpenMP заданный алгоритм.

Этот код сделан вот таким вариантом: Тип элемента данных----Знаковый короткий целый
Алгоритм---Сортировка столбцов матрицы по возрастанию.

Мне нужно переделать его на вот такой: Тип элемента данных----Длинное целое
Алгоритм---Сортировка массива с помощью пирамидальной сортировки.

Пожалуйста помогите, завтра нужно сдать.

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
#include <fstream>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <thread>
#include <omp.h>
using namespace std;
void ArrayShow(int** A, int row, int cols);// Вывод массива на экран
void ArrayInit(int** A, int row, int cols);// Заполнение массива случайными числами
 
 
int main()
{
    setlocale(LC_ALL, "");
    int k, i, j, tmp = 0;
    int** A;
    int P;
    const int row = 10;
    const int cols = 10;
    int first;
    double timein, timeout, timein1, timeout2, dt, dt2;
    cout << "В какое количество потоков будем сортировать?\n";
    cin >> P;
 
    {
        A = new int* [row];
        for (int i = 0; i < row; i++) A[i] = new int[cols];
        ArrayInit(A, row, cols);
        cout << "массив сгенирирован\n";
        ArrayShow(A, row, cols);
        cout << "Сортировка методом пузырька\n";
        timein = omp_get_wtime();
        for (int k = 0; k < row * cols; ++k) {
            int temp;
#pragma omp parallel num_threads(P)\
  default(none), shared(A, first, row,cols,k,tmp, i)
#                pragma omp for
            for (int i = 0; i < row; ++i) {
                for (int j = 0; j < cols; ++j) {
                    if (i != cols - 1) {
                        if (A[i + 1][j] < A[i][j]) {
                            int tmp = A[i + 1][j];
                            A[i + 1][j] = A[i][j];
                            A[i][j] = tmp;
                        }
                    }
 
                }
            }
        }
        timeout = omp_get_wtime();
        dt = timeout - timein;
        cout << "Сортировка завершена:\n";
        ArrayShow(A, row, cols);
        cout << "Время вычислений: " << dt << " секунд. " << "Кол-во потоков: " << P << "\n" << endl;
    }
    return 0;
}
 
//Заполнение массива
void ArrayInit(int** A, int row, int cols)
{
    cout << "Заполняем массив случайными числами:\n";//Ввод чисел в двумерный массив А
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            A[i][j] = 0 + rand() % 100;
        }
    }
}
// Отображение массива
void ArrayShow(int** A, int row, int cols)
{
    for (int i = 0; i < row; i++)
    {
        for (int j = 0; j < cols; j++)
        {
            cout << " " << A[i][j];
        }
        cout << "\n";
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.06.2022, 10:43
Ответы с готовыми решениями:

Помогите, пожалуйста, написать или изменить код программы в Pascal ABC. Структурированный тип данных.
{Признак делимости. Дано натуральное число N (N&lt;=1000). Найти минимальное число A, которое делится...

Необходимо получить тип элемента и с помощью CType или DirectCast изменить его тип
Всем привет! Подскажите, пожалуйста, есть ли вариант решения данной проблемы: Необходимо получить...

Как изменить код? Есть код для CharacterConroller, а нужно этот код переделать для CapsuleColider
Это код для CharacterContoller, помогите изменить этот код для Capsule Colider (не могу) На вопрос...

Переделать код на шаблонный тип (template)
Пожалуйста переделайте код на шаблонный тип стека :( #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

Переделать код из типа char в тип string
Прошу, помогите переделать код из типа char в тип string... В char'е все работает, но из-за...

8
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
19.06.2022, 15:42 2
Цитата Сообщение от Enigma02 Посмотреть сообщение
По быстрому,
А это как понимать?
Типа "ну-ка, быстро, задроты, собрались и сделали за меня"?

Добавлено через 16 секунд
Попытаете удачи в разделе фриланса? По-быстрому?
0
0 / 0 / 0
Регистрация: 26.09.2020
Сообщений: 52
19.06.2022, 15:49  [ТС] 3
Хотел написать "срочно" но не пишется ну вот и по другому написал, ну кто хочет помочь тот и поможет сделать, я никого не заставляю делать. Я и не имел ввиду о том что ты написал.
0
0 / 0 / 0
Регистрация: 26.09.2020
Сообщений: 52
20.06.2022, 10:05  [ТС] 4
Я все сделал, но появился другой вопрос "как увеличить размерность кода". У меня время работы слишком быстрое поэтому учитель сказал "увеличь размерность кода"


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
#include <fstream>
#include <iostream>
#include <conio.h>
#include <stdlib.h>
#include <string>
#include <thread>
#include <omp.h>
using namespace std;
void ArrayShow(int* A, int n);// Вывод массива на экран
void ArrayInit(int* A, int n);// Заполнение массива случайными числами
void heapSort(int* A, int n);//Сортировка методом пирамиды
int P=5;
 
 
int main()
{
    setlocale(LC_ALL, "");
    double timein, timeout, dt;
    cout << "В какое количество потоков будем сортировать?\n";
   
    int A[] = { 78,12,56,12,42,76,34,9,11,8,88 };
        int n = sizeof(A) / sizeof(A[0]);
        for (int i = 0; i < n; i++) ;
        //ArrayInit(A, n);
        cout << "Массив сгенирирован\n";
 
        for (int i = 0; i < n; i++)
        {
            cout << " " << A[i];
        }
 
        cout << "\nСортировка методом пирамиды\n";
        timein = omp_get_wtime();
        heapSort(A, n);
       
      
        timeout = omp_get_wtime();
        dt = timeout - timein;
        cout << "Сортировка завершена:\n";
 
        for (int i = 0; i < n; i++)
        {
            cout << " " << A[i];
        }
 
        cout << "\nВремя вычислений: " << dt << " секунд. " << "Кол-во потоков: " << P << "\n" << endl;
        
        cout << endl;
    return 0;
}
 
void heapify(int A[], int n, int i)
{
    int largest = i;
    // Инициализируем наибольший элемент как корень
    int l = 2 * i + 1; // левый = 2*i + 1
    int r = 2 * i + 2; // правый = 2*i + 2
 
 // Если левый дочерний элемент больше корня
    if (l < n && A[l] > A[largest])
        largest = l;
 
    // Если правый дочерний элемент больше, чем самый большой элемент на данный момент
    if (r < n && A[r] > A[largest])
        largest = r;
 
    // Если самый большой элемент не корень
    if (largest != i)
    {
        swap(A[i], A[largest]);
 
        // Рекурсивно преобразуем в двоичную кучу затронутое поддерево
        heapify(A, n, largest);
    }
}
 
// Основная функция, выполняющая пирамидальную сортировку
void heapSort(int A[], int n)
{
#pragma omp parallel num_threads(P)\
  default(none), shared(A,n)
#                pragma omp for
 
    // Построение кучи (перегруппируем массив)
    for (int i = n / 2 - 1; i >= 0; i--)
 
        heapify(A, n, i);
 
    // Один за другим извлекаем элементы из кучи
    for (int i = n - 1; i >= 0; i--)
    {
        // Перемещаем текущий корень в конец
        swap(A[0], A[i]);
 
        // вызываем процедуру heapify на уменьшенной куче
        heapify(A, i, 0);
    }
}
0
2834 / 2336 / 708
Регистрация: 29.06.2020
Сообщений: 8,655
20.06.2022, 11:46 5
Цитата Сообщение от Enigma02 Посмотреть сообщение
У меня время работы слишком быстрое
А на 11 элементах должно быть по другому ?
std::this_thread::sleep_for
По ссылке есть и пример использования.
1
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
20.06.2022, 11:54 6
Цитата Сообщение от SmallEvil Посмотреть сообщение
std::this_thread::sleep_for

Отличное решение!
0
2834 / 2336 / 708
Регистрация: 29.06.2020
Сообщений: 8,655
20.06.2022, 12:03 7
Цитата Сообщение от lemegeton Посмотреть сообщение
Отличное решение!
Ну а что ?
Плохое решение ? Я потоки вообще не знаю. Так , в общем ознакомился.
Программа все равно же ничего другого не делает, пусть поспит , бедолага.
Или ТС-у что то другое нужно?
1
0 / 0 / 0
Регистрация: 26.09.2020
Сообщений: 52
20.06.2022, 12:14  [ТС] 8
Вот у меня есть также код, здесь на языке Java когда увеличиваешь n время растет, а можно ли сделать на с++ также?

Java
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
public class Main {
    public static void main(String[] args) throws InterruptedException {
        int[] k= {1, 2, 4, 8};
        int n=100000000;
        double from = 0;
        long to = 1;
        long time;
        int step;
        double rrectangle=0,rtrapezoid=0,rsimpson=0,h;
 
        h = (to - from) / (double)n;
        for (int j = 0; j < k.length; j++) {
            step = n/k[j];
            System.out.println("Thread's number: "+k[j]+"\n");
            for(int order=0;order<3;order++) {
                MyTheard[] theard = new MyTheard[k[j]];
                for (int i = 0; i < k[j]; i++) {
                    theard[i] = new MyTheard(from, h, i * step, (i + 1) * step,order);
                }
 
                time = System.currentTimeMillis();
                for (MyTheard t : theard) {
                    t.start();
                }
                for (MyTheard t : theard) {
                    t.join();
                }
                for (MyTheard t : theard) {
                    rrectangle += t.Resultrec();
                    rtrapezoid += t.Resulttrap();
                    rsimpson += t.Resultsimp();
                }
 
                switch (order)
                {
                    case 0:
                        rrectangle *= h;
                        System.out.println("Rectangle Method: \n"+rrectangle+"\nTime:");
                        System.out.println(System.currentTimeMillis()-time+"\n");
                            break;
                    case 1:
                        System.out.println("Trapezoidal method: \n"+rtrapezoid+"\nTime:");
                        System.out.println(System.currentTimeMillis()-time+"\n");
                            break;
                    case 2:
                        System.out.println("Parabola method (Simpson): \n"+rsimpson+"\nTime:");
                        System.out.println(System.currentTimeMillis()-time+"\n");
                            break;
                }
                time=0;
                rrectangle = 0;
                rtrapezoid = 0;
                rsimpson = 0;
            }
        }
    }
}
0
4773 / 2582 / 894
Регистрация: 29.11.2010
Сообщений: 5,590
20.06.2022, 14:55 9
Цитата Сообщение от Enigma02 Посмотреть сообщение
MyTheard
В этом коде вся работа происходит в этом классе.
Можно ли такое сделать на С++ -- можно. Но что это "такое" -- неясно.
0
20.06.2022, 14:55
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.06.2022, 14:55
Помогаю со студенческими работами здесь

переделать алгоритм в код (с++)
Здравствуйте! Нужно составить игру про шарики. Если в линии встречаются 3 или больше одинаковых...

Переделать под комбинированный тип данных
Вот у меня есть задачка , найти периметр треугольника по координатам его вершин. Задачку решил...

Как правильно переделать код? Что изменить?
Даны натуральное число n и действительные числа a1,a2....an.Необходимо: получить новую...

Подправить код. Переделать сортировку. Изменить вывод
нужно переделать усовершенствованнную пузырьковую сортировку на сортировку выбором. + чтобы...

Как изменить тип элемента в форме с текстбокса на комбобокс
Решил убрать поля с подстановкой, в таблицах. При создании новой формы, вместо привычных готовых...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru