Console
? Do czego służą?
Console.WriteLine
, a do czego Console.ReadLine
?
=
i ==
? Jakiego typu wartości zwraca drugi z nich?
if..else
?
2 + 3 – 2 2 + 3 * 2 2 + 3 / 2 2 / 3 / 2 3 / 2 / 1 3 / 2 / 1.0 2.0 / 3.0 / 2.0 2 / 3 * 2 2 * 3 / 2
int a = 1; int b = 3; a = a + b; b = a - b; a = a - b;
else
?
if..else..if
, a w jakim switch
?
while
od do..while
?
for
z indeksem, jakie polecenia/wyrażenia znajdują się w nawiasach okrągłych?
for(int i=0; i<10; i++) Console.WriteLine(i);
?
break
i continue
?
for
i instrukcji Console.Write
, wyświetl w konsoli poniższe cztery wzory:
**** 54321 121212 122333 *** 65432 212121 223334444 ** 76543 121212 333444455555 * 87654 212121 444455555666666
do..while
, napisz program-zabawę w zgadywanie liczby „pomyślanej” przez komputer (z zakresu 1 – 10).
int nwd(int a, int b);
i int nww(int a, int b);
, które odpowiadają za obliczanie wartości NWD i NWW.
for(int i = 2; i < 10; i += 2)
?
switch
.
Math.PI
.
null
zmiennej referencyjnej?
using
dodany do deklaracji zmiennej lokalnej?
Nullable<>
.
is
?
(Exception)a
od działania operatora as
: a as Exception
?
int[] ti = new int[3];
, a jakimi Exception[] te = new Exception[3];
?
foreach
od pętli for
?
int[] ti = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
.ti[2]
, a jaką ti[10]
? Które elementy znajdą się w tablicy ti[4..8]
?
switch
korzystał z tabeli łańcuchów z zapisanymi dniami tygodnia.
Random r = new Random(); int n = r.Next(8); //losowanie liczby od 0 do 7 string opis; switch(n) { case 1: opis="niedziela"; break; case 2: opis="poniedziałek"; break; case 3: opis="wtorek"; break; case 4: opis="środa"; break; case 5: opis="czwartek"; break; case 6: opis="piątek"; break; case 7: opis="sobota"; break; default: opis="błąd!"; break; } Console.WriteLine("Dzień tygodnia: " + n + ", " + opis);
inc
i dec
, które przyjmują tablice liczb całkowitych, a zwracają tablicę liczb odpowiednio zwiększonych i zmniejszonych o jeden. Rozważ dwie wersje takich metod: zwracających tę samą tablicę ze zmienionymi wartościami elementów lub zmodyfikowaną kopię tablicy.
ToString
dla poszczególnych elementów przesłanej tablicy.
ciągFibonacciego
, która zapełni podaną w argumencie tablicę kolejnymi wyrazami ciągu Fibonacciego, zaczynając od 0 i 1. Kolejne wyrazy ciągu oblicza się dodając dwa wcześniejsze elementy. Są to więc 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, itd. Zwróć uwagę, że metoda nie ma zwracać tablicy o wskazanej w argumencie długości, a zapełnić istniejącą tablicę, do której referencja przekazana jest w argumencie.
ekstrema
z ćwiczeń w taki sposób, żeby zwracała w dwóch tablicach indeksy wszystkich równych sobie minimów i maksimów podanej tablicy. Problemem będzie to, że liczba elementów obu tablic nie jest z góry znana. (Bardziej naturalne rozwiązanie korzystające z list będzie omówione w części dotyczącej kolekcji.)
ekstrema
w taki sposób, żeby zwracała w dwóch tablicach indeksy wszystkich minimów i maksimów, ale tym razem wykorzystaj listy do ich gromadzenia. Ponadto referencję do obu kolekcji należy zwrócić korzystając z krotki.
qAAAAAAAAAAA
napisze na taśmie Twoje imię (to możliwe, o ile imię nie zawiera liter L i R).
qASs sSRq qBRb bALq
(1) w = [wx, wy, wz].
Wektory oznaczone są symbolami pogrubionymi.
Długość wektora definiuje się jako pierwiastek z sumy kwadratów współrzędnych, a więc:
(2) |w| = √(wx2 + wy2 + wz2).
Dla wektorów można zdefiniować iloczyn skalarny, czyli funkcję pobierającą dwa wektory, a zwracającą liczbę, której wartość obliczana jest według następującego wzoru:
(3) w•u = wxux + wyux + wzux.
Ciekawą własnością iloczynu skalarnego jest to, że jego wartość równa się iloczynowi długości obu wektorów i cosinusa kąta między nimi α:
(4) w•u = |w||u|cos(α).
Dzięki temu można obliczyć kąt między dwoma wektorami. Wystarczy użyć wzorów (2) i (3), aby obliczyć długości wektorów i ich iloczyn skalarny, a następnie wykorzystać przekształcony wzór (4):
(5) cos(α) = (w•u) / (|w||u|).
Sam kąt obliczymy korzystając z funkcji arcus cosinus:
(7) α = arccos((w•u) / (|w||u|)).
Zwróćmy uwagę na to, że dwa wektory, których długość nie jest równa zeru, są do siebie prostopadłe, gdy ich iloczyn skalarny równy jest zeru. To wynika zarówno ze wzoru (7), jak i wprost ze wzoru (4).
To nie wszystko. Dla wektorów w trójwymiarowej przestrzeni możemy również zdefiniować iloczyn wektorowy, którego wynikiem jest wektor prostopadły do obu mnożonych wektorów i którego długość zależy od kąta między nimi. Iloczyn wektorowy może być obliczony na podstawie wzoru:
(8) w×u = [uywz-uzwy, uzwx-uxwz, uxwy-uywx]
Również ten iloczyn ma ciekawą własność związaną z kątem między wektorami. Długość wektora będącego iloczynem wektorowym dwóch wektorów równa jest iloczynowi długości tych wektorów i sinusa kątów między nimi:
(9) |w×u| = |w||u|sin(α).
Oto zadania, które określają kolejne czynności prowadzące do zdefiniowania struktury Wektor:
Wektor
, która przechowuje trzy liczby rzeczywiste typu double
. Zastanów się, czy są jakieś warunki, które muszą spełniać współrzędne, aby obiekt wektora był poprawny (moim zdaniem nie ma).
Długość
, która zwraca długość wektora typu double
.
+
i -
, które zwracają sumę i różnicę dwóch wektorów. Zdefiniuj również jednoargumentowe operatory +
i -
.
==
, !=
oraz metody Equals
i GetHashCode
.
Dot
i Cross
, które implementują iloczyny skalarny i wektorowy. Możesz również zdefiniować operator *
, który przyjmuje dwa wektory, a zwraca liczbę double
będącą ich iloczynem skalarnym. Jeżeli się odważysz, możesz użyć operatora ^
dla iloczynu wektorowego.
*
, który przyjmuje wektor i liczbę rzeczywistą typu double
(w obu kolejnościach) i zwraca wektor, którego współrzędne pomnożone są przez tą liczbę. Analogicznie zdefiniuj również operator /
dla wektora i liczby rzeczywistej.
true
gdy wektory są prostopadłe i false
w przeciwnym przypadku.
IComparable
z metodą CompareTo
, która porównuje wektory według ich długości.
double
, Wektor
), a zwraca obiekt typu Wektor
będący sumą ważoną podanych wektorów z podanymi w pierwszych elementach krotek wagami. Jeżeli tą wagę jest masa, wynikiem jest środek masy ciał o podanych wagach i położeniach.
Ulamek
omawianą na ćwiczeniach z programowania obiektowego w taki sposób, żeby implementowała interfejs IConvertible
. Przygotuj testy jednostkowe dla metod deklarowanych w tym interfejsie.
Wektor
(zob. ćwiczenia z części dotyczącej programowania obiektowego).