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
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.
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.