В каждый файл кроме трех вспомогательных (их не трогать) введите код, приведенный ниже. Комментарии (строки, начинающиеся с символов "//" и выделенные темным цветом) к коду программы можно пропустить и не набирать. Строки, набранные курсивом, не набирать. Они являются вспомогательными или служат для указания начала кода файла с именем, указанным в этой строке. Исходные данные в приводимой программе (пп 1-8) соответствуют данным тестового примера № 1.
(Читайте продолжение материала после листинга файлов проекта Ferma)...
Начало листинга файлов проекта Ferma
Файл Ferma.cpp - файл с главной функцией main()
#include "stdafx.h"
// Единицы измерения те же, что и в тестовых примерах - kH и см. Хотя результаты
// расчета выводятся в тех же единицах, что и исходные данные. Поэтому при
// решении собственных задач вводите данные в наиболее удобных для Вас единицах.
// Подключаем библиотеки ввода-вывода стандартного и потокового
#include <stdio.h>
#include <iostream.h>
// Подключение файлов заголовков классов узла, стержня, внешней силы
#include "Node.h"
#include "Rod.h"
#include "Force.h"
// Используются в циклах for()
long i, j;
// Число узлов, стержней, уравнений
long numNodes, numRods, equations;
// Указатели на будующие массивы узлов, стержней, внешних сил
CNode *node;
CRod *rod;
CForce *force;
// Указалели на двумерный массив матрицы жесткости MatrixA (матрица
// коэффициентов) всей системы, одномерных матриц внешних сил MatrixB (матрица
// свободных членов), перемещений узлов по незакрепленным направлениям
// MatrixX (матрица неизвестных) и перемещений узлов Displace (окончательное
// решение)
double **MatrixA, *MatrixB, *MatrixX, *Displace;
// Объявление функции решения системы уравнений вида A*x=b
void LUDecomposition(long n, double **MatrixA, double *MatrixB,
double *MatrixX);
// Начало исполняемого кода программы
int main(int argc, char* argv[])
{
//
// Ввод исходных данных
//
// Пункт 1
// Создание объектов узлов
numNodes = 3;
node = new CNode[numNodes];
// Пункт 2
// Функция SetCoord назначает координаты узлов (см. листинг файла Node.cpp)
node[0].SetCoord(0, 0);
node[1].SetCoord(50.0, 86.60254);
node[2].SetCoord(100, 0);
// Пункт 3
// Создание объектов стержней
numRods = 2;
rod = new CRod[numRods];
// Пункт 4
// Функция SetNodesNumber назначает номера начальному и конечному узлам
// стержня (см. листинг файла Rod.cpp)
rod[0].SetNodesNumber( 0, 1 );
rod[1].SetNodesNumber( 1, 2 );
// Пункт 5
// Функция SetParam назначает характеристики стержю - площадь и модуль
// упругости (см. листинг файла Rod.cpp)
rod[0].SetParam( 10, 2.06e4 );
rod[1].SetParam( 10, 2.06e4 );
// Пункт 6
// Функция SetConnection назначает наличие внешних связей узла по
// горизонтальной оси 0Х и по вертикальной оси 0Y. Наличие связи - true,
// отсутствие -false (см. листинг файла Node.cpp)
node[0].SetConnection( true, true );
node[1].SetConnection( false, false );
node[2].SetConnection( true, true );
// Пункт 7
// Создание объектов внешних сил
force = new CForce[numNodes];
// Пункт 8
// Функция SetValue назначает величину внешней силы по осям 0Х и 0Y
// (см. листинг файла Force.cpp)
force[0].SetValue( 0, 0 );
force[1].SetValue( 0, -10 );
force[2].SetValue( 0, 0 );
//
// Расчет
//
// Пункт 9
// Функция GetLength вычисляет длину стержня (см. листинг файла Rod.cpp)
for( i = 0; i<numRods; i++ )
rod[i].GetLength();
// Пункт 10
// Функция GetAngle вычисляет угол наклона стержня к горизонтальной оси
// 0Х (см. листинг файла Rod.cpp)
for( i = 0; i<numRods; i++ )
rod[i].GetAngle();
// Пункт 11
// Функция FillSelfMatrix заполняет матрицу |k| стержня (в глобальной системе
// координат) (см. листинг файла Rod.cpp)
for( i = 0; i<numRods; i++ )
rod[i].FillSelfMatrix();
// Пункт 12
// Создание массива указателей на будующие столбцы матрицы жесткости фермы
// Каждый узел имеет два перемещения, поэтому матрица MatrixA имеет
// размерность (2*numNodes)х(2*numNodes)
MatrixA = new double* [2*numNodes];
// Создание массива столбцов матрицы жесткости фермы
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.