krata kod

#include "bibs.h"

const int roz=1000;

char katalog[roz]="D:\\Dokumenty\\kratownica_infa\\projekt\\projekt\\";

char plik[roz];

fstream wczytywanie,zapisywanie;

void main()

{ //Definiowanie podstawowych zmiennych do wczytywania danych z plików txt

int M; //liczba prętów kratownicy

int N; //liczba węzłów

int Z; //liczba odebranych stopni swobody

strcpy_s(plik,katalog);

strcat_s(plik,"alok.txt");

wczytywanie.open(plik,ios::in);

wczytywanie>>M; //wczytujemy liczbe prętów z 1. wiersza alok.txt

int** ALOK=NEW(0,M,2); //utworzenie macierzy alokacji ALOKmx2

for(int i=0;i<M;i++)

for(int j=0;j<2;j++)

wczytywanie>>ALOK[i][j];

wczytywanie.close();

display("ALOK",ALOK,M,2); //wyświetlenie macierzy ALOK

strcpy_s(plik,katalog);

strcat_s(plik,"boundary.txt");

wczytywanie.open(plik,ios::in);

wczytywanie>>Z; //wczytujemy ile jest odebranych st. swobody z 1. wiersza boundary.txt

int* R=NEW(0,Z); //wektor Rz z numerami odebranych st. swobody

for(int i=0;i<Z;i++)

wczytywanie>>R[i];

wczytywanie.close();

quick_sort(R,Z); // sortowanie wektora R od najmniejszej do największej wartości

display("R",R,Z); //wyświetlenie wektora R

strcpy_s(plik,katalog);

strcat_s(plik,"cart.txt");

wczytywanie.open(plik,ios::in);

wczytywanie>>N; // wczytywanie liczby węzłów

double** X=NEW(0.0,N,2); // macierz Xnx2 ze składowymi położen wszystkich prętów

for(int i=0;i<N;i++)

for(int j=0;j<2;j++)

wczytywanie>>X[i][j];

wczytywanie.close();

display("X",X,N,2); //wyświetlanie macierzy X ze składowymi położen prętów

int T=2*N; //zmienna pomocnicza

strcpy_s(plik,katalog);

strcat_s(plik,"force.txt");

wczytywanie.open(plik,ios::in);

double* Q=NEW(0.0,T); //wektor Qt zawierający składowe pionowe(Y) i poziome (X) sił i reakcji

for(int i=0;i<T;i++)

wczytywanie>>Q[i];

wczytywanie.close();

display("Q",Q,T); //wyświetlenie wektora Q sił i reakcji

double* L=NEW(0.0,M); //wektor Lm z długościami prętów

double** B=NEW(0.0,M,T); //macierz Bmxt kosinusów kierunkowych prętów

for ( int a=0;a<M;a++) //zerowanie macierzy B

for (int b=0;b<T;b++)

B[a][b]=0;

for(int p=0; p<M; p++)

{

int i0=ALOK[p][0]; //numery globalne końców prętów (1. kolumna z ALOK)

int i1=ALOK[p][1]; //numery globalne końców prętów (2. kolumna z ALOK)

double dX=X[i1][0]-X[i0][0]; //rzut pręta na oś X

double dY=X[i1][1]-X[i0][1]; //rzut pręta na oś Y

L[p]=sqrt(pow(dX,2)+pow(dY,2)); // obliczenie długości pręta

double alfa=dX/L[p]; // kosinus kierunkowy

double beta=dY/L[p]; // kosinus kierunkowy

B[p][2*i0]=-alfa;

B[p][2*i0+1]=-beta;

B[p][2*i1]=alfa;

B[p][2*i1+1]=beta; // 4 składowe macierzy B w wierszu p

}

display("L",L,M);

display("B",B,M,T); //wyświetlenie macierzy Btxm i wektora Lm

double** D=NEW(0.0,T,M); //Dtxm - Transponowana macierz B

for(int i=0;i<T;i++)

for(int j=0;j<M;j++)

D[i][j]=B[j][i]; //transpozycja

display ("D",D,T,M); //wyświetlenie macierz Dbxt

//Definiowanie kolejnych macierzy i wektorów

//podział macierzy D na dwie części

double** Dg=NEW(0.0,T-Z,M); //macierz górna

double** Dd=NEW(0.0,Z,M); //macierz dolna

double* F=NEW(0.0,M); //wektor poszukiwanych sił w prętach, który obliczamy

double* Qg=NEW(0.0,T-Z); //wektor z węzłami w których nie ma reakcji

double* Qd=NEW(0.0,Z); // wektor,który obliczamy z reakcjami w węzłach

int wd=0; //pomocnicze zmienne-liczniki

int wg=0;

for (int s=0;s<T;s++)

{

if (s==R[wd]) //jeżeli s jest elem. wektora Rz(nr st. swob.)

{

for(int i=0;i<M;i++)

Dd[wd][i]=D[s][i]; // wiersz s macierzy Dtxm zapisujemy do Dd

wd++;

}

else

{

Qg[wg]=Q[s]; //składową s wektora Qt zapisujemy do Qg

for (int i=0;i<M;i++)

Dg[wg][i]=D[s][i]; //wiersz s macierz Dtxm zapisujemy do Dg

wg++;

}

}

if (T-Z==M) //sprawdzenie czy macierz Dd jest kwadratowa

{

for (int i=0;i<M;i++)

gauss(Dg,Qg,F,M); //obliczenie sił F w prętach

for (int i=0;i<Z;i++)

for(int j=0;j<M;j++)

Qd[i]+=Dd[i][j]*F[j]; // obliczenie składowych reakcji Qd z zależności Dd*F=Qd

}

for(int i=0;i<M;i++)

cout<<"\nSila w precie "<<i<<" : F["<<i<<"]="<<F[i];

//wyświetlenie wyników na ekranie

for(int i=0;i<Z;i++)

{

cout<<"\nReakcja w wezle " <<R[i]/2;

if(!(R[i]%2)) //bo bylo i=2i(+1) przy alokacji

cout<<" w kierunku poziomej osi x - stopien swobody "<<R[i]<<" : Qd["<<i<<"]="<<Qd[i];

else

{

cout<<" w kirerunku pionowej osi y";

cout<<" - stopien swobody "<<R[i]<<" : Qd["<<i<<"]="<<Qd[i];

}

}

//zapisywanie wyników do plików

strcpy_s(plik,katalog);

strcat_s(plik,"sily.txt");

zapisywanie.open(plik,ios::out);

//zapisywanie sił

for (int i=0;i<M;i++)

{

zapisywanie<<"F["<<i<<"] = "<<F[i]<<endl;

}

zapisywanie.close();

//Zapisywanie reakcji

strcpy_s(plik,katalog);

strcat_s(plik,"reakcje.txt");

zapisywanie.open(plik,ios::out);

for (int i=0;i<Z;i++)

{

zapisywanie<<Qd[i]<<endl;

}

zapisywanie.close();

DEL(ALOK);

DEL(R);

DEL(X);

DEL(Q);

DEL(L);

DEL(B);

DEL(D);

DEL(Dg);

DEL(Dd);

DEL(Qg);

DEL(Qd);

DEL(F);

cout<<endl;

}


Wyszukiwarka

Podobne podstrony:
krata kod
04) Kod genetyczny i białka (wykład 4)
1 kod kresk
kod matlab
Krata płaska przekrój wzdłuż kanału
cwicz mechanika budowli obliczanie ukladow statycznie niewyznaczalnych metoda sil krata
Gazeta Wyborcza a kod kulturowy judaizmu
105 - Kod ramki, RAMKI NA CHOMIKA, Miłego dnia
niebieskie 2, ❀KODY RAMEK I INNE, Gotowe tła do rozmówek
54 - Kod ramki, RAMKI NA CHOMIKA, Gotowe kody do małych ramek
140 - Kod ramki
28 - Kod ramki(1), RAMKI NA CHOMIKA, Gotowe kody do średnich ramek
17 - Kod ramki, ❀KODY RAMEK I INNE, Ramki
179 - Kod ramki - szablon

więcej podobnych podstron