Семён
Семён

Помогите кто, чем может!)

Вот собственно задание:
Создать приложение которое считывать исходные
данных из двух текстовых файлов, содержащих соответственно матрицы [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...

Сергей
Сергей

не очень понятно, что тут подразумевается под асинхронным режимом. чтобы одновременно читать из двух файлов, необходима или среда с потоками и синхронизацией, или среда на событиях. если под posix, то делаешь цикл обработки событий с вызовами select или poll, вроде как-то так, под виндой не знаю

Ярослав
Ярослав

Два потока, каждый читает из своего файла
Подождать когда оба завершатся, проверить что вернули коды безошибочного
состояния.
Распараллелить (или в основном потоке main) решить систему
В отдельном потоке вывести.

Вариант выше, если тебе нужно МНОГОПОТОЧНОЕ программирование,
если же нужно именно асинхронное чтение / запись, то кроме MSDN
CreateFile ничего не подскажу.

Ведь либы сторонние тебе использовать нельзя, так?

Похожие вопросы
помогите!! ! )))) ! )
Кто нибудь ПОМОГИТЕ!
помогите пожалуйста помогите!!!!
помогите кто может прогромисты помогите
помогите! помогите! помогите! в МАЙНе!
Помогите
ПОМОГИТЕ!!!
помогите!
Помогите с ...
Помогите