Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Программа 3

.cpp
Скачиваний:
2
Добавлен:
16.07.2021
Размер:
1.24 Кб
Скачать
#include <stdio.h>
#include <omp.h>
#include <locale.h>
#include <time.h>

void main()
{
	const int NMAX = 10;
	setlocale(LC_ALL, "Rus");
	int i, j;
	int* a = new int[NMAX];
	int* b = new int[NMAX];
	int* c = new int[NMAX];
	for (i = 0; i < NMAX; i++)
		a[i] = i;
	for (i = 0; i < NMAX; i++)
		b[i] = 100 - i;
	// инициализация данных

	double t1, t2, dt;
	t1 = omp_get_wtime();
	int total1 = 0;
	int total2 = 0;
#pragma omp parallel shared(a,b,c,total1, total2) private(i,j)
	{
#pragma omp sections
		{
#pragma omp section
			{
				for (i = 0; i < NMAX / 2; i++)
				{
					if (a[i] >= b[i])
						c[i] = a[i];
					else
						c[i] = b[i];
#pragma omp critical
					total1 = total1 + c[i];
				}
			}
#pragma omp section
			{
				for (j = NMAX / 2; j < NMAX; j++)
				{
					if (a[j] >= b[j])
						c[j] = a[j];
					else
						c[j] = b[j];
#pragma omp critical
					total2 = total2 + c[j];
				}
			}
		}
	} /* Завершение параллельного фрагмента */

	int total = total1 + total2;

	t2 = omp_get_wtime();
	dt = t2 - t1;

	delete[] a;
	delete[] b;
	delete[] c;

	printf("Сумма элементов матрицы C равна %d\n", total);

	printf("Программа работала %f секунд.\n", dt);

}