Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
САПР_МУ_С++.doc
Скачиваний:
4
Добавлен:
12.11.2018
Размер:
5.03 Mб
Скачать

1 Лабораторная работа. Создание скелета программного проекта

Для создания скелета программного проекта следует в меню File/new выбрать проект типа win32 application (в следующем окне – empty project).

Затем в меню File/new следует создать С++ Source File с именем main.

Еще нужно подключить библиотеку MFC. Для этого в меню Project/Settings во вкладке General измените “Not using MFC” на “Use MFC in shared DLL” или “Use MFC in static library”.

Файл main.cpp будет содержать основной код программы. В нем должны быть описаны загрузка всех окон, кнопок, рисунка, матриц и т.д. В других файлах будут описаны вспомогательные функции.

Отчет по лабораторной работе должен содержать текст документа «Описание применения» в соответствии с требованиями Единой системы программной документации ЕСПД

Документ Описание применения разрабатывается в расчете на то, что читать его должен специалист по АСУТП с целью первоначального ознакомления с функциями программы. Текст документа оюязательно должен состоять из следующих пунктов:

  • назначение программы (указывают назначение, возможности программы, ей основные характеристики, ограничения, накладываемые на область применения- программы);

  • условия применения (указывают условия, необходимые для выполнения программы - требования к техническим средствам, другим программам, общие характеристики входной и выходной информации, а также требования и условия организационного, технического и технологического характера);

  • описание задачи (должно быть указано определения задачи и методы её решения -описывается содержательная и математическая формулировка задачи, общая методика решения задачи)

  • входные и выходные данные (должны быть указаны общие сведения о.входных и выходных данных).

2 Лабораторная работа. Создание файлов с описанием матричных операций

В файлах s_matrix.h, s_matrix.cpp создадим новый тип данных - класс матрицы. Класс имеет свои функции или переменные, доступ к которым может быть открытым или закрытым. В классе сначала объявляются какие-нибудь функции и переменные, а после объявления класса идет описание функций класса.

Нажмите File/New, “C++ Source File” и создайте файл с именем s_matrix. Затем повторите операцию, но только уже выберите тип “C/C++ Header File” и создайте файл с таким же именем s_matrix.

В файле s_matrix.h описываются заголовки создаваемых матричных операций

#ifndef S_MATRIX_H

#define S_MATRIX_H

#include <math.h>

#include <stdio.h>

typedef unsigned int UINT;

class CMatrix

{

public:

CMatrix();

double*pData;

UINT m_columns;

UINT m_rows;

void SetSize (UINT row, UINT cols);

void SetValue (UINT row, UINT cols, double val);

double GetValue (UINT row, UINT cols);

void SaveMatrix (FILE*file);

void LoadMatrix (FILE*file);

};

CMatrix operator+(CMatrix A,CMatrix B);

CMatrix operator-(CMatrix A,CMatrix B);

CMatrix operator*(CMatrix A,CMatrix B);

CMatrix operator-(CMatrix A);

CMatrix operator*(double val, CMatrix A);

CMatrix operator*(CMatrix A,double val);

CMatrix _matrix (UINT columns, UINT rows, double value=0.0);

CMatrix _onematrix (UINT num);

#endif

Затем в файле s_matrix.cpp (для перехода – левая панель, File/View, развернуть файлы) описываются собственно матричные операции.

#include "s_matrix.h"

CMatrix operator*(CMatrix A,CMatrix B)

{

CMatrix C;

C.SetSize(A.m_rows,B.m_columns);

for(UINT j=0;j<C.m_rows;j++)

{

for(UINT i=0;i<C.m_columns;i++)

{

double tmp=0.0;

for(UINT k=0;k<B.m_rows;k++)

{

tmp+=B.GetValue(k,i)*A.GetValue(j,k);

}

C.SetValue(j,i,tmp);

}

}

return C;

}

CMatrix operator+(CMatrix A,CMatrix B)

{

CMatrix C;

C.SetSize(A.m_rows,A.m_columns);

for(UINT i=0;i<A.m_columns*A.m_rows;i++)

{

C.pData[i]=A.pData[i]+B.pData[i];

}

return C;

}

CMatrix operator-(CMatrix A,CMatrix B)

{

CMatrix C;

C.SetSize(A.m_rows,A.m_columns);

for(UINT i=0;i<A.m_columns*A.m_rows;i++)

{

C.pData[i]=A.pData[i]-B.pData[i];

}

return C;

}

CMatrix operator-(CMatrix A)

{

CMatrix C;

C.SetSize(A.m_rows,A.m_columns);

for(UINT i=0;i<A.m_columns*A.m_rows;i++)

{

C.pData[i]=-A.pData[i];

}

return C;

}

CMatrix operator*(double val,CMatrix A)

{

CMatrix C;

C.SetSize(A.m_columns,A.m_rows);

for(UINT i=0;i<A.m_columns*A.m_rows;i++)

{

C.pData[i]=val*A.pData[i];

}

return C;

}

CMatrix operator*(CMatrix A,double val)

{

CMatrix C;

C=val*A;

return C;

}

CMatrix _matrix(UINT rows,UINT columns,double value)

{

CMatrix m;

m.SetSize(rows,columns);

for(UINT i=0;i<m.m_columns*m.m_rows;i++)

{

m.pData[i]=value;

}

return m;

}

CMatrix _onematrix(UINT num)

{

CMatrix m;

m.SetSize(num,num);

for(UINT j=0;j<num;j++)

{

for(UINT i=0;i<num;i++)

{

if(i!=j) m.SetValue(i,j,0.0);

else m.SetValue(i,j,1.0);

}

}

return m;

}

CMatrix::CMatrix()

{

m_columns=0;

m_rows=0;

}

void CMatrix::SetSize(UINT row,UINT col)

{

pData=new double[col*row];

m_columns=col;

m_rows=row;

}

void CMatrix::SetValue(UINT row,UINT col,double val)

{

pData[row*m_columns+col]=val;

}

double CMatrix::GetValue(UINT row,UINT col)

{

return pData[row*m_columns+col];

}

void CMatrix::SaveMatrix(FILE*file)

{

fprintf(file,"%d %d\n",m_rows,m_columns);

for(UINT i=0;i<m_columns*m_rows;i++)

{

fprintf(file,"%f",pData[i]);

}

}

void CMatrix::LoadMatrix(FILE*file)

{

int col,row;

fscanf(file,"%d %d",&row,&col);

SetSize(row,col);

for(UINT i=0;i<m_columns*m_rows;i++)

{

float t;

fscanf(file,"%f",&t);

pData[i]=(double)t;

}

}

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

Отчет по лабораторной работе должен содержать распечатку текста введенного модуля