background image

Informatyka I – Lab 07, r.a. 2011/2012 

prow. Sławomir Czarnecki 

 

Przykład – Algorytm – Zadanie na laboratorium nr. 7. Suplement 

 
Opisany algorytm obliczania sił w kratownicach statycznie wyznaczalnych wyjaśniony będzie 
dodatkowo na przykładzie 8-prętowej kratownicy statycznie wyznaczalnej – por. Rys.1.  
 
Krok 1. Globalny układ kartezjański 0XY przyjęto jak na rysunku Rys.1. 
 
Krok 2. Numeracja  globalna węzłów 

01,…, = 5

, numeracja globalna prętów 

= 0, 

1,…,  = 7

, liczba odebranych stopni swobody Z = 4 (pionowy stopień swobody w węźle 

3

poziomy stopień swobody w węźle 

4

, poziomy i pionowy stopień swobody w węźle 

5

). 

 
Definiowanie  dynamiczne  w  programie  macierzy  i  wektorów: 

2

×

ALOK

2

×

X

T

Z

  

zaleca  się  poprzedzić  utworzeniem  w  dowolnym  katalogu,  plików  tekstowych  o 
przykładowych  nazwach:  alok.txt,  cart.txt,  force.txt,  bondary.txt  (kojarzących  się  z 
przeznaczeniem danych przechowywanych w tych plikach). Proponuje się następujący zapis 
danych do tych plików:  

  topologię połączeń prętów kratownicy (relacje definiujące dla kaŜdego numeru pręta 

numery węzłów na jego końcach) – 

plik

 alok.txt,  

  geometrię (współrzędne kartezjańskie węzłów) – 

plik

 cart.txt,  

  obciąŜenia (składowe kartezjańkie sił przyłoŜonych do węzłów) – 

plik

 force.txt   

  warunki podparcia (numery odebranych stopnii swobody w kierunku poziomym i/lub 

pionowym) – 

plik

 bondary.txt 

dla 8-prętowej kratownicy statycznie wyznaczalnej przedstawionej na Rys.1. Przyjmujemy: 

[ ]

1.5

l

h

m

=

=

[ ]

3

1.0 10

Q

N

=

 
 
 

0

1

2

3

4

5

0

1

2

3

4

7

5

6

Q

l

l

l

h

X

Y

 

Rys.1. 

 
 
 
 
 
 
 
 

background image

 

plik

alok.txt    

 

plik

cart.txt   

 

plik

force.txt   

 

w pierwszym wierszu  

w pierwszym wierszu

  

w kolejnych wierszach

 

liczba prętów (równa 8)  

liczba węzłów (równa 6)

 

wszystkie składowe

 

a następnie w kolejnych  

a następnie w kolejnych 

wektorów obciąŜenia  

wierszach wszystkie    

wierszach wszystkie   

węzłów w układzie 0XY 

składowe macierzy    

składowe kartezjańskie 

przy czym nieznane  

alokacji oddzielone    

połoŜeń węzłów w    

składowe reakcji   

spacją   

 

 

przyjętym układzie 0XY  

przyjąć równe 0 

 

 

 

 

6

 

 

 

 

0.0 0.0

 

4 5 

 

 

 

1.5 0.0  

 

 

0.0 0.0 

0 5 

 

 

 

3.0 1.5  

 

 

0.0 -1.0e3 

0 4 

 

 

 

4.5 1.5  

 

 

0.0 0.0 

0 1 

 

 

 

3.0 0.0  

 

 

0.0 0.0 

1 3 

 

 

 

0.0 0.0  

 

 

0.0 0.0 

1 2 

 

 

 

0.0 1.5  

 

 

 

2 3 
0 3 
 

plik

boundary.txt 

 

 

Uwaga !

 Przyjmujemy numerację stopni swobody 

w pierwszym wierszu

  

 

,

x

y

i i

 w kierunku odpowiednio osi X i Y w węźle i-tym  

liczba odebranych

  

 

 

następująco: 

stopni swobody (równa 4)

 

 

2

x

i

i

= ⋅

 

(w kierunku poziomym X

a następnie w kolejnych

 

 

2

1

y

i

i

= ⋅ +

 

(w kierunku pionowym Y

wierszach wszystkie  
numery odebranych 
stopni swobody 

 



10 
11 
 

pliku

 alok.txt pierwszą liczbą jest liczba prętów M. Kolejność pozostałych zapisywanych 

danych musi odpowiadać kolejności przyjętej numeracji prętów (od 0 do 7). 

pliku

 cart.txt pierwszą liczbą jest liczba węzłów N. Kolejność pozostałych zapisywanych 

danych musi odpowiadać kolejności przyjętej numeracji węzłów (od 0 do 5). 

pliku

  force.txt  nie  ma  juŜ  konieczności  zapisu  liczby  węzłów  N  jeśli  załoŜymy,  Ŝe  w 

programie  plik  ten  będzie  czytany  po  wczytaniu  pliku  cart.txt.  Kolejność  zapisywanych 
danych musi odpowiadać kolejności przyjętej numeracji węzłów (od 0 do 5). 

pliku

  bondary.txt  pierwszą  liczbą  jest  liczba  odebranych  stopni  swobody  Z.  Kolejność 

pozostałych  zapisywanych  danych  nie  jest  w  tym  przypadku  istotna  pod  warunkiem,  Ŝe  po 
wczytaniu  tych  danych  w  programie  do  wektora  R,  będzie  on  posortowany  od  najmniejszej 
do największej wartości.    
 
 
 

background image

Krok  2.  Przed  dynamicznym  utworzeniem  macierzy 

2

×

ALOK

  zaleca  się  najpierw 

wczytanie  pierwszej  danej  –  liczby  prętów  M  z  pliku  alok.txt,  a  następnie  zdefiniowanie 
dynamiczne  macierzy 

2

×

ALOK

  i  kontynuowanie  wczytywania  danych  z  pliku  alok.txt  z 

jednoczesnym inicjalizowaniem odpowiednich składowych macierzy 

2

×

ALOK

.  

 
Krok 3.
 Przed dynamicznym utworzeniem wektora 

Z

 zaleca się najpierw wczytanie z pliku 

boundary.txt  pierwszej  danej  –  liczby  odebranych  stopni  swobody  Z,  a  następnie 
zdefiniowanie  dynamiczne  wektora 

Z

  i  kontynuowanie  wczytywania  danych  z  pliku 

boundary.txt z jednoczesnym inicjalizowaniem odpowiednich składowych wektora 

Z

.  

 
Krok  4.
  W  celu  posortowania  utworzonego  w  ten  sposób  wektora  moŜna  wywołać  funkcję 
quick_sort(…) lub bubble_sort(…) z biblioteki bibs.h
 
Krok  5.
  Przed  dynamicznym  utworzeniem  macierzy 

2

×

X

  zaleca  się  najpierw  wczytanie  z 

pliku  cart.txt  pierwszej  danej  –  liczby  węzłów  N,  a  następnie  zdefiniowanie  dynamiczne 
macierzy 

2

×

X

  i  kontynuowanie  wczytywania  danych  z  pliku  cart.txt  z  jednoczesnym 

inicjalizowaniem odpowiednich składowych macierzy 

2

×

X

.  

 
Krok  6.
  W  przyjętej  powyŜej  kolejności  wczytywania  danych,  moŜliwe  jest  dynamiczne 
utworzenie  wektora 

T

  dla  T  =  2N,  a  następnie  rozpoczęcie  wczytywanie  danych  z  pliku 

force.txt z jednoczesnym inicjalizowaniem odpowiednich składowych wektora 

T

 
Krok  7.
  NaleŜy  dynamicznie  zdefiniować  wektor 

M

  oraz  macierz 

M

T

×

B

  i  postępować 

zgodnie  z  opisanym  algorytmem  w  celu  zainicjalizowania  składowych  wektora 

M

  i 

macierzy 

M

T

×

B

 
Krok  8.
  NaleŜy  dynamicznie  zdefiniować  macierz 

T

M

×

D

  i  w  odpowiedni  sposób  ją 

zainicjalizować. 
 
Krok 9.
 NaleŜy dynamicznie zdefiniować macierze 

,

g

d

D

D

, wektor F oraz wektory 

,

g

d

Q

Q

o  wymiarach  podanych  w  kroku  9  i  postępować  zgodnie  z  opisanym  algorytmem  w  celu 
zainicjalizowania składowych obu macierzy 

,

g

d

D

D

 i wektora 

g

Q

Krok 10. NaleŜy sprawdzić warunek 

?

T

Z

M

=

 i w przypadku jego spełnienia obliczyć siły 

w  prętach  kratownicy  rozwiązując  układ  równań  liniowych 

g

g

=

D F

Q

  (kaŜda  kratownica 

będzie zdefiniowana jako statycznie wyznaczalna, stąd traktować naleŜy warunek 

?

T

Z

M

=

 

jedynie jako formalne sprawdzenie poprawności przyjmowanych/wczytywanych/obliczanych 
danych).  Do  rozwiązania  układu  równań  moŜna  na  przykład  wywołać  funkcję  gauss(…)  z 
biblioteki  bibs.h  .  NaleŜy  pamiętać,  Ŝe  macierz 

g

D

układu  równań  nie  jest  symetryczna.  Po 

znalezieniu wektora F, reakcje zewnętrzne 

d

 obliczamy z formuły 

d

d

=

Q

D F .   

 
 
 

background image

Dodatkowe uwagi 
 

•  Po  uruchomieniu  programu,  na  ekranie  monitora  konieczne  jest  wyświetlenie 

wszystkich  dynamicznie  definiowanych  wektorów  i  macierzy.  W  tym  celu  moŜna 
wywoływać funkcję display(…) z biblioteki bibs.h .  

•  Dodatkowo,  naleŜy  zapisać  do  pliku  tekstowego  sily.txt  oraz  reakcje.txt  wartości 

składowych wektorów odpowiednio F i 

d

.  

•  Po utworzeniu się plików sily.txt oraz reakcje.txt (sprawdzić czy się utworzyły i  czy 

zapisane  zostały  do  nich  poprawne  wartości)  naleŜy  wywołać  program  Wizualizacja 
Kratownicy.exe
  napisany  w  C#.  Program  ten  będzie  dostępny  w  odpowiednim 
katalogu.  Po  wywołaniu  programu  wizualizacji,  na  ekranie  pojawić  powinna  się 
analizowana kratownica oraz obliczone siły podłuŜne. 

background image