Расчет плоских ферм и арок. Расчетная схема фермы с принятой нумерацией узлов и стержней, страница 5

В каждый файл кроме трех вспомогательных (их не трогать) введите код, приведенный ниже. Комментарии (строки, начинающиеся с символов "//" и выделенные темным цветом) к коду программы можно пропустить и не набирать. Строки, набранные курсивом, не набирать. Они являются вспомогательными или служат для указания начала кода файла с именем, указанным в этой строке. Исходные данные в приводимой программе (пп 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];

// Создание массива столбцов матрицы жесткости фермы