if (abs(keyDemo)>1) MatWriteDetMat(keyDemo,0,0,n,A,0);
#endif
// приведение матрицы к треугольному виду
for (k=1; k<=n-1; k++)
{
for (i=k+1; i<=n; i++)
{
if (AW[k][k]==0.0)
{
#ifdef DEMO
if (keyDemo!=0) MatWriteDetMat(keyDemo,2,k,n,A,0);
#endif
return k;
}
c=AW[i][k]/AW[k][k];
for (j=1; j<=n; j++)
AW[i][j]-=c*AW[k][j];
} // цикла по i
#ifdef DEMO
if (abs(keyDemo)>1) MatWriteDetMat(keyDemo,1,k,n,AW,0);
#endif
} // цикла по k
// расчет произведения элементов главной диагонали
det=1.0;
for (i=1; i<=n; i++)
det*=AW[i][i];
#ifdef DEMO
if (abs(keyDemo)>1) MatWriteDetMat(keyDemo,3,0,n,AW,det);
#endif
return 0;
}
//════════════════════════════════════════════════════════════════════
// Конец функции DetMat
//════════════════════════════════════════════════════════════════════
//════════════════════════════════════════════════════════════════════
// Конец модуля Matrix
//════════════════════════════════════════════════════════════════════
Листинг 3
/*
╔════════════════════════════════════════════════════════════════╗
║ Модуль для вывода на дисплей или в файл промежуточных данных ║
║ при выполнении алгоритмов модуля Matrix ║
╚════════════════════════════════════════════════════════════════╝
*/
// ════════════════════════════════════════════════════════════════════
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include "dmatrix.h"
// ───────────────────── Глобальные переменные ────────────────────────
extern int keyDemo;
extern string FileName;
string Format;
FILE *F=NULL;
// ─── Начало функции MatGetRealFormat ────────────────────────────────
void MatGetRealFormat(void)
// функция для формирования строки спецификации формата
// вещественного числа
{
string str;
strcpy(Format,"%");
itoa(npos,str,10);
strcat(Format,str);
strcat(Format,".");
itoa(ndig,str,10);
strcat(Format,str);
strcat(Format,spec);
strcat(Format," ");
}
// ─── Конец функции MatGetRealFormat ─────────────────────────────────
// ─── Начало функции MatOpenOutFile ───────────────────────────────────
void MatOpenOutFile(int keyDemo, int numFrag)
// функция для открытия файла вывода
{
if (keyDemo<0)
{
if (FileName=="\0") strcpy(FileName,"detmat.dat");
}
else strcpy(FileName,"con");
if (numFrag==0) F=fopen(FileName,"w");
else F=fopen(FileName,"a");
}
// ─── Конец функции MatOpenOutFile ──────────────────────────────────
// ─── Начало функции MatWriteDetMat ─────────────────────────────────
void MatWriteDetMat(int keyDemo, int numFrag, int numStep,
int n, Matrix A, double det)
// функция для вывода данных алгоритма функции DetMat
{
// формирование формата
MatGetRealFormat();
// вывод по фрагментам
switch (numFrag)
{
case 0: // начальный фрагмент вывода
MatOpenOutFile(keyDemo,numFrag);
fprintf(F,"\n=== Функция DetMat ===\n");
MatWriteMat(n,n,A,"Исходная матрица\n");
fclose(F);
break;
case 1: // вывод матрицы в цикле
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.