background image

Informatyka - Podstawy Programowania w Języku C++ 

prow. Sławomir Czarnecki 

 

Zadania na laboratorium nr. 6 

 
1. Zdefiniuj następującą funkcję f: 
 

( )

( )

( )

2

10

9

1

10 sin

cos

sin

3

100

20

f x

x

x

x

x

x

=

+

+

 
a następnie wywołaj ją w programie (dla dowolnej wartości x) wyświetlając na ekranie wynik. 
Deklaracja funkcji f: 

double

 f(

double

 x). 

 
2. Zdefiniuj dwie funkcje (ich deklaracje są podane poniŜej): 

 

void

 swap_value(

double

 x,

double

 y); 

void

 swap_reference(

double

& x,

double

& y); 

 

których kod ma realizować zamianę wartości dwóch zmiennych: x i y : 
 

•  swap_value(

double

 x,

double

 y) (zmienne x i y przekazywane przez wartość), 

•  swap_reference(

double

& x,

double

& y) (zmienne x i y przekazywane przez referencję). 

 
Przeprowadź  test  polegający  na  wyświetleniu  na  ekranie  wartości  przekazywanych  do  tych 
funkcji zmiennych przed i po ich wywołaniu. 
 
3.  Zdefiniuj  funkcję 

void

  point(

double

**  T, 

long

  m, 

long

  n, 

long

  a, 

long

  b)  inicjalizującą 

składowe macierzy T o wymiarach 

m n

×

 całkowitymi liczbami pseudolosowymi z przedziału 

domkniętego 

[ ]

,

a b

  dla  ,

a b ∈ ℤ   (zakładamy,  Ŝe  a

b

< ).  Parametr  m  oznacza  Ŝądaną  liczbę 

punktów  w  przestrzeni 

n

.  Funkcja  point(...)  generuje  zatem  (pseudolosowo)  m 

(niekoniecznie  róŜnych)  punktów  w  n  wymiarowej  przestrzeni  Euklidesowej,  których 
współrzędne kartezjańskie zapisywane są do macierzy 

[ ][ ]

T m n

 w taki sposób, Ŝe w kaŜdym 

wierszu  i-tym  tej  macierzy  mamy  n  współrzędnych  punktu  i-tego  (

0,1,...,

1

i

m

=

− ).  W 

przypadku 

2

n =

,  zapisz  do  pliku  tekstowego  t.txt  (w  dowolnie  wybranym,  ale  istniejącym 

katalogu)  składowe  tablicy  T  w  taki  sposób,  aby  wygodne  było  sporządzenie  wizualizacji 
połoŜeń  wygenerowanych  punktów  w  wybranym  przez  siebie  programie  graficznym  (na 
przykład: Excel, Mathematica, Maple, CAD, MicroStation itp. itd.).  
Przykładowa wizualizacja w Excelu pokazana została poniŜej: 
 

 

 

Rys. 1. Losowo wygenerowane punkty  

 

background image

4.  Zdefiniuj  funkcję 

void

  mesh(

int

**  a, 

double

**  x, 

int

  m, 

int

  n, 

double

  H, 

double

  L),  która 

generuje  węzły  i  pręty  kratownicy  płaskiej  (por.  rys.2.  poniŜej).  Pręty  generowane  są  na 
osnowie  regularnej  siatki  węzłów  definiującej  m  pionowych  i  n  poziomych  prostokątnych 
modułów,  kaŜdy  o  wysokości 

/

H m   i  długości 

/

L n .  W  kaŜdym  module  znajduje  się 

dodatkowo pręt ukośny pokrywający się z przekątną prostokąta.  
Całkowita  liczba  węzłów  kratownicy  wynosi  zatem 

(

) (

)

1

1

N

m

n

=

+ ×

+

,  a  całkowita  liczba 

prętów  kratownicy  wynosi 

(

)

(

)



1

1

liczba pretow ukosnych

liczba pretow poziomych

liczba pretow pionowych

E

m

n

n

m

m n

=

+ ×

+

+ ×

+

×









.  Funkcja 

mesh(...) inicjalizuje dwie macierze: 

[ ][ ]

2

a E

 typu 

int

 oraz 

[ ][ ]

2

x N

 typu 

double

. W kaŜdym 

wierszu  i-tym  macierzy 

2

E

a

×

  składowe 

[ ][ ]

0

a i

[ ][ ]

1

a i

  oznaczają  kolejno  numer  globalny 

węzła  początkowego  oraz  końcowego  pręta  i-tego,  przy  czym  (dla  ustalenia  uwagi) 
zakładamy,  Ŝe  zawsze 

[ ][ ] [ ][ ]

0

1

a i

a i

<

.  Przykładowo,  dla  kratownicy  z  rys.2 

[ ][ ]

[ ][ ]

26 0

9 ,

26 1

16

a

a

=

=

.  W  kaŜdym  wierszu  i-tym  macierzy 

2

N

x

×

  składowe 

[ ][ ]

0

x i

[ ][ ]

1

x i

  oznaczają  odpowiednio  pierwsza  oraz  drugą  składową  kartezjańską  węzła  i-tego  w 

globalnym  układzie  współrzędnych  0XY.  Na  podstawie  macierzy 

2

E

a

×

  oraz 

2

N

x

×

  zapisz  do 

pliku  tekstowego  XY.txt  (w  dowolnie  wybranym,  ale  istniejącym  katalogu)  współrzędne 
kartezjańskie  początkowych  i  końcowych  węzłów  definiujących  pręty  w  taki  sposób,  aby 
wygodne  było  sporządzenie  wizualizacji  kratownicy  w  wybranym  przez  siebie  programie 
graficznym (na przykład: Excel, Mathematica, Maple, CAD, MicroStation itp. itd.). 
 

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

L

H

m

n

X , j

Y , i

0

 

Rys.2. Kratownica 53 prętowa wygenerowana dla 

3

m =  i 

5

n =  

 
Macierze 

2

E

a

×

  i 

2

N

x

×

  są  podstawowymi  strukturami  danych  uŜywanymi  w  algorytmach 

obliczeń  numerycznych  statyki  oraz  dynamiki  zarówno  statycznie  wyznaczalnych  jak  i 
statycznie niewyznaczalnych konstrukcji kratowych. 

background image

Wskazówka 
 
Nietrudno zauwaŜyć, Ŝe przy przyjętym sposobie numeracji węzłów i prętów, numer l węzła 
zaleŜy  od  numeru  „rzędu”  i  (wzdłuŜ  osi  Y)  jak  i  „kolumny”  j  (wzdłuŜ  osi  X)  w  następujący 
sposób 
 

( )

(

)

(

)

,

1

0,1,...,

;

0,1,...,

l

l i j

i

n

j

i

m j

n

=

= ×

+ +

=

=

 

 
Przykładowo, zaznaczony na rys.2 węzeł o numerze globalnym 15 leŜy w rzędzie 

2

i =  oraz 

kolumnie 

3

j = , a zatem dla przyjętej liczby kolumn równej 

1 5 1 6

n + = + =  mamy faktycznie 

 

( )

(

)

,

1

2 6 3 15

l

l i j

i

n

j

=

= ×

+ + = × + =

 
Wykorzystując  powyŜszą  regułę  numeracji,  obliczanie  składowych  macierzy  alokacji 

2

E

a

×

 

moŜna w bardzo prosty sposób oprogramować w oparciu o poniŜszy rysunek 
 

i

i+1

j

j+1

i (n + 1) + j

i (n + 1) + j + 1

(i + 1)(n + 1) + j

(i + 1)(n + 1) + j + 1

 

Rys.3. Numeracja węzłów zaleŜna od numeracji współrzędnych dyskretnych i, j . 

 
W  celu  inicjalizacji  macierzy 

2

N

x

×

  najprościej  jest  oczywiście  załoŜyć,  Ŝe  układ 

współrzędnych kartezjańskich 0XY ma początek w lewym dolnym wierzchołku kratownicy.