Witam,
mam za zadanie napisać program, który będzie współbieżnie realizował dowolne złożone współbieżne zadanie obliczeniowe w OpenMP. Ponadto program musi posiadać prosty interfejs (trackbary, spinboxy, cokolwiek), w którym w czasie rzeczywistym będzie można modyfikować parametry zrównoleglenia (m.in. parametry w pragmach, liczbę sekcji, ziarnistość, cokolwiek) tego konkretnego algorytmu. Postanowiłem wykorzystać obliczanie interpolacji Newtona. Program został napisany w C++, w Visual Studio. Czy przy okazji mógłby ktoś sprawdzić, czy prawidłowo użyłem pragmy?
Mam już napisany kod w C++, oraz stworzony prosty interfejs. Niestety nie wiem jak to teraz ze sobą połączyć (np. wpisywanie w pole odpowiedniego współczynnika x0 lub okno w którym znajduj się wynik). Ponadto nie wiem w jaki sposób mogę zmodyfikować potrzebne parametry (m.in. parametry w pragmach, liczbę sekcji, ziarnistość) oprócz wpisywania wartości w pola.
Oto kod w C++:
#include <cstdlib>
#include <math.h>
#include <iostream>
#include <omp.h>
using namespace std; int main(int argc, char *argv[])
{
int n;
cout << "Podaj stopien wielomianu:\n";
do {
cin >> n;
} while((n<1)||(n>10000));
double x[n]; double c[n];
cout << "Podaj wezly i wartosci:\n"; for(int i=0;i<n;i++)
{
cout << " x" << i << ": "; cin >> x[i];
cout << " y" << i << ": ";
cin >> c[i]; }
#pragma omp parallel
for(int k=1;k<n;k++) {
for(int i=n;i>k;i--)
{
c[i] = (c[i] - c[i-1])/(x[i]-x[i-k]);//te 2 petle trzeba zamienic }
}
cout << "W(x) = ";
for(int i=0;i<n;i++) {
cout << c[i];
for(int j=0;j<i;j++) {
cout << "(x"; if(x[j]>0) cout << "-";
else cout << "+";
cout << fabs(x[j]) << ")";
} if(i!=n-1)cout<<"+"; }
cout<<endl;
}
system("PAUSE");
return 0;
}
}
A oto interfejs:
.
Proszę o pomoc i wyrozumiałość.