krata kod

background image

1

#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

background image

2

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++)

background image

3

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