#include "bibs.h"
const int roz=1000;
char katalog[roz]="D:\\Dokumenty\\kratownica_infa\\projekt\\projekt\\"; //ścieżka dostępu do plików tekstowych z danymi
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
for(int j=0;j<2;j++)
wczytywanie>>ALOK[i][j]; //wczytujemy alokacje poszczególnych prętów
wczytywanie.close();
display("ALOK",ALOK,M,2); //wyświetlanie 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;iwczytywanie>>R[i];
wczytywanie.close();
quick_sort(R,Z); // sortowanie wektora R od najmniejszej do największej wartości
display("R",R,Z); //wyświetlanie 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 z cart.txt
for(int i=0;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;iwczytywanie>>Q[i];
wczytywanie.close();
display("Q",Q,T); //wyświetlanie 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 for (int b=0;bB[a][b]=0;
for(int p=0; 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 for(int j=0;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
//pomocnicze zmienne-liczniki
int wd=0;
int wg=0;
for (int s=0;s{
if (s==R[wd]) //jeżeli s jest elem. wektora Rz(nr st. swob.)
{
for(int i=0;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 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 gauss(Dg,Qg,F,M); //obliczenie sił F w prętach
for (int i=0;i for(int j=0;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 cout<<"\nSila w precie "<
//wyświetlenie wyników na ekranie
for(int i=0;i {
cout<<"\nReakcja w wezle " < if(!(R[i]%2)) //bo bylo i=2i(+1) przy alokacji
cout<<" w kierunku poziomej osi x - stopien swobody "< else
{
cout<<" w kirerunku pionowej osi y";
cout<<" - stopien swobody "< }
}
//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{
zapisywanie<<"F["<}
zapisywanie.close();
//Zapisywanie wyników reakcji do pliku
strcpy_s(plik,katalog);
strcat_s(plik,"reakcje.txt");
zapisywanie.open(plik,ios::out);
for (int i=0;i{
zapisywanie<
}
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<}
Wyszukiwarka
Podobne podstrony:
cw16 krata student
Krata płaska
KRATA
Ława z kratą jako kącik wypoczynkowy
krata
projekt wstępny (2) recover krata
zestawienie stali krata k1 1
Inf krata
krata A1
E book Za Krata Netpress Digital
krata z?lką
krata kod
więcej podobnych podstron