|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Программу из С++ нужно переделать в С |
|
C/C++ - Программу из С++ нужно переделать в С
|
Новый участник Сообщения: 1 |
Доброго времени суток! Помогите разобраться с заданием. Нужно переделать код из С++ в С.
Код на С++ работает правильно #include <iostream> #include <omp.h> #define M 5000 #define E 0.00001 #define T 0.01 int main(){ int i, j, v; long int dt1; double alf, bet, mf; double Spr, Spr1, Spz; // double A[M][M], F[M], Xk[M], Zk[M], Rk[M], Sz[M]; double ** A = new double*[M]; double * F = new double[M]; double * Xk = new double[M]; double * Zk = new double[M]; double * Rk = new double[M]; double * Sz = new double[M]; omp_set_num_threads(2); double ts = omp_get_wtime(); for (int i=0;i<M;i++) A[i] = new double[M]; for (mf=0,i = 0; i < M; i++) { #pragma omp parallel { #pragma omp for for (j = 0; j < M; j++) { if(i == j) A[i][j] = 2.0; else A[i][j] = 8.; } } F[i] = M + 1; mf += F[i] * F[i]; } /* Задаем начальное приближение корней. В Хk хранятся значения корней * к-й итерации. */ #pragma omp parallel { #pragma omp for for (i = 0; i < M; i++) Xk[i] = 0.2; } /* Задаем начальное значение r0 и z0. */ for (i = 0; i < M; i++) { Sz[i]=0; double sum = 0; #pragma omp parallel { #pragma omp for reduction(+:sum) for (int j = 0; j < M; j++) { sum += A[i][j] * Xk[j]; } } Sz[i] = sum; Rk[i] = F[i] - Sz[i]; Zk[i] = Rk[i]; } do { Spz = 0; Spr = 0; for(i = 0; i < M; i++) { Sz[i]=0; double sum = 0; #pragma omp parallel { #pragma omp for reduction(+:sum) for(int j = 0; j < M; j++) sum += A[i][j] * Zk[j]; } Sz[i] = sum; Spz += Sz[i] * Zk[i]; Spr += Rk[i] * Rk[i]; } alf = Spr/Spz; Spr1 = 0; #pragma omp parallel { #pragma omp for for(int i = 0; i < M; i++){ Xk[i] += alf*Zk[i]; Rk[i] -= alf*Sz[i]; #pragma omp critical Spr1 += Rk[i]*Rk[i]; } } bet = Spr1/Spr; #pragma omp parallel { #pragma omp for for(i = 0; i < M; i++) Zk[i] = Rk[i] + bet*Zk[i]; } } while(Spr1/mf > E*E); // Xk[0]...Xk[M-1] - корни double tf = omp_get_wtime(); std::cout<<"\nruntime: "<<tf - ts<<" s.\n"; std::cout<<Xk[0]<<" "<<Xk[1]; return(0); } |
|
Отправлено: 07:00, 22-05-2015 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
C/C++ - Переделать программу на Си | S*2012* | Программирование и базы данных | 4 | 02-05-2013 22:31 | |
Нужно запустить программу и залогиниться. | Good | AutoIt | 0 | 02-03-2013 18:42 | |
переделать faq с выходом из MySQL | binders | Вебмастеру | 0 | 17-09-2010 19:00 | |
C/C++ - Переделать программу на кассы | mephistophel | Программирование и базы данных | 0 | 12-06-2010 17:10 | |
нужно переделать файл doc в файл txt | гала | Тест-форум | 1 | 15-01-2010 18:53 |
|