Демонстрационные возможности программ. Функция для вычисления определителя квадратной матрицы. Модуль для вывода на дисплей или в файл промежуточных данных

Страницы работы

Содержание работы

Демонстрационные возможности программ

Все функции пакета, реализующие относительно сложные алгоритмы, имеют возможность демонстрации хода их исполнения. Такая  демонстрация оказывается очень полезной при изучении алгоритмов, а также в случае, если для какого-то набора входных данных алгоритм не завершается успешно и необходимо понять причины этого. Демонстрация заключается в выводе на экран или в файл промежуточных данных алгоритма и некоторых специальных сообщений, поясняющих его ход.

Функции, осуществляющие демонстрацию работы алгоритма, вынесены в отдельный вспомогательный модуль для того, чтобы не загромождать тексты функций основного модуля. Имя вспомогательного демонстрационного модуля отличается от соответствующего основного префиксом d (Demo). Так, в рассматриваемом примере, функция DetMat() находится в модуле Matrix (файл matrix.cpp), а функции, демонстрирующие ее работу, – в модуле dMatrix (файл dmatrix.cpp). Демонстрационный модуль должен также находиться в рабочем каталоге и включаться в проект. Однако если демонстрация не используется, есть возможность не включать этот модуль в проект; как это делается, описывается далее.

Для рассматриваемого примера тексты модулей приведены на листингах 1 – 5 в конце этого текста:

-  листинг 1 – главная (управляющая программа);

-  листинг 2 – модуль Matrix в упрощенном варианте только с функцией DetMat();

-  листинг 3 – модуль dMatrix;

-  листинг 5 – заголовочный файл модуля Matrix;

-  листинг 6 – заголовочный файл модуля dMatrix.

Управление демонстрацией  осуществляется с помощью переменной intkeyDemo, которая имеется в списке формальных параметров всех функций, допускающих демонстрацию.  Эта переменная может быть объявлена и задана в главной функции, а затем использована при вызове функции. Но удобнее задавать ее значение в списке  фактических параметров в виде константы, как показано на листинге 1. Переменная имеет задаваемое по умолчанию значение, равное нулю (см. заголовочный файл matrix.h). Если оно таким и остается, то демонстрация не осуществляется. Положительные значения keyDemo задают вывод демонстрации на экран, а отрицательные – в файл. Абсолютная величина keyDemo определяет степень подробности вывода. При |keyDemo|=1 данные выводятся только при ошибочном завершении алгоритма, при |keyDemo|=2 выводятся самые поверхностные данные, при |keyDemo|=3 – более подробные и т.д. Диапазон допустимых значений keyDemo и характер выводимой при этом информации для каждой функции различны. Их можно определить по документации к функции или опытным путем.

Если вывод демонстрационных данных осуществляется в файл, то можно задать его имя в списке параметров вызова функции, как показано на листинге 1 (третий вариант вызова). Если имя файла не задавать (первый и второй варианты вызова), то будет использоваться имя файла по умолчанию. Оно обычно совпадает с именем функции или очень незначительно от него отличается и имеет расширитель .dat. Имя файла демонстрационных данных для функции DetMat()по умолчанию – detmat.dat.

Если имя файла все-таки задается в списке параметров, то оно принимается переменной stringFileName_,а затем присваивается переменной FileName, являющейся глобальной для основного модуля (в примере – Matrix) и вспомогательного (dMatrix).

Промежуточные данные выводятся при обращении к соответствующей функции из вспомогательного модуля (в рассматриваемом примере это функция MatWriteDetMat()). Операторы вызова этой функции выделяются в тексте тем, что записываются с первой позиции, а также окаймлены директивами препроцессора условной компиляции, например,

#ifdef DEMO

if (keyDemo!=0) MatWriteDetMat(keyDemo,2,k,n,A,0);

#endif

Директивы условной компиляции #ifdef DEMO ... #endif позволяет включить или не включить в текст объектного модуля находящийся между ними оператор, в зависимости от значения константы DEMO. Она определяется в первой строке модуля Matrix #define DEMO

Если эта директива открыта, то константа DEMO получает значение true и оператор внутри #ifdefDEMO ... #endif компилируется. Если демонстрация не используется, и нет желания включать модуль dmatrix.cpp в проект, нужно только закрыть директиву определения константы DEMO символом комментария:

//#defineDEMO

При этом все операторы вызова демонстрирующих функций будут исключены и вспомогательный демонстрирующий модуль в проект можно не присоединять.

Функции демонстрирующих модулей имеют вспомогательный характер и при первом знакомстве с основными алгоритмами их можно внимательно не анализировать. Но в результате выполнения практикума должно сложиться достаточно детальное понимание их текста и студент должен уметь пояснить, как они работают.

Листинг 1

#include <iostream.h>

#include <conio.h>

#include "matrix.h"

void main()

{

// описаниеданных

     int n,Err;

double det;

     Matrix A;

// задание входных данных

n=3;

     A[1][1]= 2; A[1][2]=-4; A[1][3]= 12;

     A[2][1]=-1; A[2][2]= 5; A[2][3]=-15;

     A[3][1]= 5; A[3][2]=-9; A[3][3]= 31;

// расчет определителя

     clrscr();

Похожие материалы

Информация о работе

Предмет:
Информатика
Тип:
Методические указания и пособия
Размер файла:
69 Kb
Скачали:
0