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

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

8 страниц (Word-файл)

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

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

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

Функции, осуществляющие демонстрацию работы алгоритма, вынесены в отдельный вспомогательный модуль для того, чтобы не загромождать тексты функций основного модуля. Имя вспомогательного демонстрационного модуля отличается от соответствующего основного префиксом 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