Помогите кто, чем может!)
Вот собственно задание:
Создать приложение которое считывать исходные
данных из двух текстовых файлов, содержащих соответственно матрицы [A] и вектора
свободных членов {b}, в асинхронном режиме. В строке перед матрицей указывается её
размерность, разделяема символов «x», в строке перед вектором указывается просто число–
размерность вектора. Матрицы и вектора в файлах разделяются 2 пустыми строками.
В процессе чтения исходных данных необходимо проверить их корректность и начать
решать СЛАУ, если все исходные данные для этого считаны и проведена проверка их
корректности ввода. После решения СЛАУ указанным методом необходимо сохранить
результаты вычислений также в асинхронном режиме.
А вот мой код:
#pragma warning(disable:4996)
struct AS
{
double ja[110][110];
double L[110][110];
double U[110][110];
double ja2[110];
double x[110];
double y[110];
int n;
};
using namespace std;
struct AS jam[50];
void foutmas(FILE *f, FILE *f2, struct AS &cd);
void CS(struct AS &cd, FILE *f);
int main()
{
FILE *F = fopen("data.txt", "r");
FILE *F2 = fopen("data2.txt", "r");
FILE *F3 = fopen("x.txt", "w");
int k = 0;
clock_t start, stop;
getchar();
start = clock();
while (!feof(F) || !feof(F2))
{
foutmas(F, F2, jam[k]);
CS(jam[k], F3);
k++;
}
stop = clock();
int time = (stop - start);
cout << time << "\n";
fclose(F);
fclose(F2);
fclose(F3);
getchar();
}
void foutmas(FILE *f, FILE *f2, struct AS &cd)
{
//Считываем значение из файла
char a[100];
const char separator[] = "x";
int yu = 0;
char *Ptr = NULL;
fscanf(f, "%[^\n]s", &a);
fscanf(f2, "%[^\n]d", &cd.n2);
char *temp = new char[strlen(a)];
strcpy(temp, a);
Ptr = strtok(a, separator);
int i = 0;
int j = 0;
while (Ptr)
{
if (i == 0)
{
cd.n = atoi(Ptr);
i = 1;
}
else
cd.n = atoi(Ptr);
Ptr = strtok(0, separator);
}
for (int i = 0; i < cd.n; i++)
{
for (int j = 0; j < cd.n; j++)
fscanf(f, "%lf", &cd.ja[i][j]);
fscanf(f2, "%lf[^\n]", &cd.ja2[i]);
}
fscanf(f, "\n");
fscanf(f, "\n");
fscanf(f2, "\n");
fscanf(f2, "\n");
}
void CS(struct AS &cd, FILE *f)
{
for (int i = 0; i < cd.n; i++)
{
for (int j = 0; j < cd.n; j++)
{
cd.U[0][i] = cd.ja[0][i];
cd.L[i][0] = cd.ja[i][0] / cd.U[0][0];
double sum = 0;
for (int k = 0; k < i; k++)
sum += cd.L[i][k] * cd.U[k][j];
cd.U[i][j] = cd.ja[i][j] - sum;
if (i > j)
cd.L[j][i] = 0;
else
{
sum = 0;
for (int k = 0; k < i; k++)
sum += cd.L[j][k] * cd.U[k][i];
cd.L[j][i] = (cd.ja[j][i] - sum) / cd.U[i][i];
}
}
}
for (int i = 0; i < cd.n; i++)
{
double summ = 0;
for (int k = 0; k < i; k++)
summ = summ + cd.L[i][k] * cd.y[k];
cd.y[i] = (cd.ja2[i] - summ) / cd.L[i][i];
}
for (int i = cd.n - 1; i >= 0; i--)
{
double summ = 0;
for (int k = cd.n - 1; k > i; k--)
summ = summ + cd.U[i][k] * cd.x[k];
cd.x[i] = (cd.y[i] - summ) / cd.U[i][i];
}
for (int i = 0; i < cd.n; i++)
{
fprintf(f, "%.2lf \n", cd.x[i]);
}
fprintf(f, "\n\n");
}
Программа работает правильно, но не в асинхронном режиме.. . Подскажите как можно переделать, или посоветуйте источник информации, только не MSDN...