Analyse a beam(Part 2)

Here is the program:

(sorry I can't get the code <> brackets to work!)

//************************************************
// ANALYSIS OF SINGLE SPAN, SIMPLY SUPPORTED BEAM
//************************************************
// CALCULATE SHEAR FORCES AND BENDING MOMENTS AT
// SECTIONS ALONG THE BEAM
//------------------------------------------------
// REF: SFBM_BUILD05_Dev02_06
//
// STATUS: SF, BM & DEFL all work but in results display I can only
// display load type as a number, rather than as a string
// (PL, UDL, TLL or TLR)
//
//************************************************

#include <iostream> //required for input/output streaming
#include <string> //allows string manipulation
#include <cmath> //note we need to include this to use pow(b,e)
#include <iomanip> //this has to be included to use setprecision()
#define BEGIN {
#define FINISH }

using namespace std;

/* Keeps window open upon completion. User closes
window by pressing key at the prompt. */
inline void keep_window_open() {
char ch;
cin >> ch;
}

// DECLARE GLOBAL VARIABLES
double L, rl, rr, ra, rb;
int j, k, nl, ns;
double vk, mk, mm, sm, z, z1, z2,wl;
double s, t;
double b, d, ec, i2;
string ldType;

// MAIN FUNCTION
int main() {

//ENTER NUMBER OF SECTIONS TO BE CONSIDERED AND
//NUMBER OF LOADS ON BEAM
cout << "DECIDE HOW MANY SECTIONS AT WHICHYOU WISH TO CALCULATE THE" << endl;
cout << "SHEAR FORCE AND BENDING MOMENT." << endl;
cout << "THE MORE SECTIONS YOU CHOOSE, THE GREATER THE ACCURACY." << endl;
cout << "USUALLY, A FIGURE OF 21 IS USED, BUT ON LARGE SPANS, YOU MIGHT" << endl;
cout << "WISH TO USE ,SAY, 51 SECTIONS." << endl;
cout << "THE NUMBER CHOSEN MUST BE AN ODD NUMBER." << endl;
cout << endl;
cout << "ENTER NUMBER OF SECTIONS TO BE CONSIDERED ALONG BEAM ";
cin >> ns;
cout << "ENTER NUMBER OF LOADS ON THE SPAN: ";
cin >> nl;
cout << "ENTER SPAN OF BEAM (metres): ";
cin >> L;

// BEAM SECTION PROPERTIES
cout << "BEAM SECTION (ENTER BEAM DIMENSIONS): "<< endl;
cout << "ENTER BEAM WIDTH - e.g. 400 - (mm): ";
cin >> b;
cout << "ENTER BEAM DEPTH - e.g. 600 - (mm): ";
cin >> d;
i2 = b* pow(d,3)/12;
// ELASTIC MODULUS WILL VARY DEPENDING ON THE BEAM MATERIAL
// FOR THE PURPOSE OF THIS PROGRAM CALCULATION WE WILL MAKE
// ec = 25000 N/sq.mm.
cout << "ENTER ELASTIC MODULUS - e.g. 25000 - (N/sq.mm): ";
cin >> ec;

int tl[nl];

//INITIALIZE ARRAYS FOR SF & BM AT SECTIONS
double vs[ns+1];
double ms[ns+1];
double W[nl];
double a[nl];
double c[nl];
double ds[ns];
double dk, zd, k1, mx;
double dm = 0, sd = 0;
double s1[ns];

// INITIALIZE SHEAR FORCE AND BENDING MOMENT ELEMENTS TO ZERO
for(k = 0; k <= (ns+1); k++) {
vs[k] = 0;
ms[k] = 0;
}

// DESCRIBE THE POSSIBLE LOAD TYPES
cout << endl << "THE POSSIBLE LOAD TYPES ARE:-" << endl;
cout << "1..POINT LOAD (PL)" << endl;
cout << "2..UNIFORMLY DISTRIBUTED LOAD (UDL)" << endl;
cout << "3..TRIANGULAR LOAD, SLOPING LEFT (TLL)" << endl;
cout << "4..TRIANGULAR LOAD, SLOPING RIGHT (TLR)" << endl;
cout << endl;

//--------------------------
// LOOP FOR NUMBER OF LOADS
//--------------------------
for (int j = 1; j<=nl; j++) { // start the FOR loop for loads
cout << endl;
cout<<"LOAD NUMBER " << j << endl;
cout<<"ENTER TYPE OF LOAD (1, 2, 3 or 4): ";
cin >> tl[j];
cout<<"ENTER LOAD, W (kN): ";
cin>>W[j];
cout << "ENTER DISTANCE OF START OF LOAD FROM LEFT SUPPORT (metres): ";
cin >> a[j];
cout<<"ENTER LENGTH OF LOAD COVER - 0 IF PL (metres): ";
cin>>c[j];
cout<<endl; // End entering beam load and dimensional data

//---------------------
// CALCULATE REACTIONS
//---------------------
switch (tl[j]) {
case 1:
s = a[j];
break;
case 2:
s = a[j] + c[j]/2;
break;
case 3:
s = a[j] + 2 * c[j]/3;
break;
case 4:
s = a[j] + c[j]/3;
break;
//---------------------
} // end of switch scope
//---------------------

t = L - s;

// Calculate Load Reactions
rl = W[j] * t/L;
rr = W[j] - rl;

ra = ra + rl;
rb = rb + rr;
cout << "RL = " << rl << "kN RR = " << rr << "kN" << endl;

// End of calculation of reactions

//------------------------------------------------------
// CALCULATE SF ALONG THE BEAM
//------------------------------------------------------
vs[1] = vs[1] + rl;

for (k = 2; k <= ns; k++) {
z = (k-1)*L/(ns-1);
switch (tl[j]) {
case 1:
if(z < a[j]) {
vk = rl;
}
else if(z > a[j]) {
vk = - rr;
}
break;
case 2:
z1 = z - a[j];
if(z<=a[j]) {
vk = rl;
}
else if(z>(a[j]+c[j])) {
vk = -rr;
}
else {
wl = W[j] * z1/c[j];
vk = rl - wl;
}
break;
case 3:
z1 = z - a[j];
if(z <=a[j]) {
vk = rl;
}
else if (z>a[j] + c[j]) {
vk = -rr;
}
else {
wl = W[j]*pow(z1/c[j],2);
vk = rl - wl;
}
break;
case 4:
z1 = z - a[j];
z2 = c[j] - z1;
if(z <=a[j]) {
vk = rl;
}
else if (z>a[j] + c[j]) {
vk = -rr;
}
else {
wl = W[j]*pow(z2/c[j],2);
vk = wl - rr;
}
break;
//---------------------------------
} // end of switch scope
//----------------------------------

// Calculate SF at sections
// Note this will sum the values of vs[k] for each load.
// vk will be the value of the current load at s section
// and will be added to the current accumulative value
// in vs[k] to give the new accumulative value of SF at
// a section.

vs[k] = vs[k] + vk;

//-----------------------------------------------------------------
} // End of Scope for calculation of SF along beam
//-----------------------------------------------------------------



closed account (48T7M4Gy)
Refer this thread:
http://www.cplusplus.com/forum/general/210417/
Topic archived. No new replies allowed.