Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Программу из С++ нужно переделать в С

Ответить
Настройки темы
C/C++ - Программу из С++ нужно переделать в С

Новый участник


Сообщения: 1
Благодарности: 0

Профиль | Сайт | Отправить PM | Цитировать


Доброго времени суток! Помогите разобраться с заданием. Нужно переделать код из С++ в С.
Код на С++ работает правильно
#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

 


Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Программу из С++ нужно переделать в С

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход