Informatyka - Podstawy Programowania w Języku C++
Kierownik przedmiotu: Sławomir Czarnecki prow. Rafał Michalczyk / Zbigniew Trybocki
Zadania na laboratorium nr. 6 dla grupy 4
1. Zdefiniuj dwa wektory a[3], b[3]. Składowymi wektorów niech będą liczby losowe z przedziału [-10,10]. Wyświetl na ekranie składowe obydwu wektorów.
Oblicz i wyświetl na ekranie wartości trzech kolejnych iloczynów: a) Skalarnego:
a ⋅ b = [
a 0] [
b 0] + a ]
1
[ b ]
1
[ + [
a 2] [
b 2]
Zauważmy, że rezultatem działania jest liczba – suma iloczynów składowych wektorów a i b: 2
Il _ skalarny = ∑
[
a i] [
b i]
i=0
b) Wektorowego:
a ]
1
[
[
b ]
2 − [
a ]
2 b ]
1
[
a × b = [
a ]
2 [
b ]
0 − [
a ]
0 [
b
]
2
[
a ]
0 b ]
1
[ − a ]
1
[
[
b ]
0
Zauważmy, że rezultatem działania jest wektor – o składowych zdefiniowanych j.w. .
c) Tensorowego:
[
a 0] [
b ]
0
[
a ]
0 b ]
1
[
[
a ]
0 [
b
]
2
a ⊗ b = a ]
1
[
[
b ]
0
a ]
1
[ b ]
1
[
a ]
1
[
[
b ]
2
[
a 2] [
b ]
0
[
a ]
2 b ]
1
[
[
a ]
2 [
b
]
2
Zauważmy, że rezultatem działania jest macierz – o składowych równych iloczynom odpowiednich składowych wektorów a i b. W ogólnej postaci składowa macierzy wynikowej jest równa:
Iloczyn _ tensorowy[ i, j] = [
a i] [
b j]
2. Rozwiąż wszystkie polecenia zadania nr 1 korzystając z funkcji zapisanych w bibliotece
„bib.h” :
a) tworzenie w sposób dynamiczny wektora:
typ_zmiennych*nazwa_wektora=NEW(wartość_składowych, wymiar_wektora); Przykład:
double* v=NEW(0.0, 10);
b) tworzenie w sposób dynamiczny macierzy:
typ_zmiennych**nazwa_macierzy=NEW(wartość_składowych,ilość_wierszy, ilość_kolumn); Przykład:
int** A=NEW(0, 5,10);
c) zwolnienie zarezerwowanej dynamicznie na stercie pamięci pod wektor/macierz: DEL(nazwa_wektora_lub_macierzy)
d) wyświetlenie na ekranie konsoli wektora: display(„dowolny_tekst”, nazwa_wektora, wymiar_wektora); Przykład:
display(„Wektor v ma postac”, v, 10);
e) wyświetlenie na ekranie konsoli macierzy: display(„dowolny_tekst”, nazwa_macierzy, ilość_wierszy, ilość_kolumn); Przykład:
display(„Macierz A ma postac”, A, 5, 10);
f) generowanie liczb pseudolosowych z dowolnego przedziału: random(od,do);
Przykład – losowanie liczby całkowitej:
random(-10,10);
Przykład – losowanie liczby zmiennoprzecinkowej: random(-10.0,10.0);
3. Korzystając z funkcji dostępnych w bibliotece „bib.h” stwórz następujące tablice o wymiarach wczytywanych z klawiatury m, n, k:
- wektory v i w o wymiarze m
- macierz A o wymiarach [ n, m] i macierz B o wymiarach [ m, k]
Składowe tablic zapełnij liczbami losowymi z przedziału [a,b], np.[-10,10].
Napisz kod realizujący następujące operacje: a) Mnożenie wektora v i wektora w – zauważmy, że wynikiem będzie liczba: m−1
c = ∑ [
v i] [
w i]
i=0
b) Mnożenie macierzy A i wektora v – zauważmy, że wynikiem będzie wektor o wymiarze n, o składowych:
m−1
[
u i] = ∑ [
A i, j] ⋅ [
v j]
j =0
c) Mnożenie macierzy A i macierzy B – zauważmy, że wynikiem będzie macierz o wymiarach n × k , o składowych: m−1
C[ i, j] = ∑ [
A i, l] ⋅ [
B l, j]
l =0
Wyświetl na ekranie dane tablice oraz wyniki, zwolnij zarezerwowaną dynamicznie pamięć.