diff --git a/main.typ b/main.typ index 7cacee1..b1ba170 100644 --- a/main.typ +++ b/main.typ @@ -106,15 +106,15 @@ W następnym rozdziale omówimy różne typy danych, które można przechowywać 3. Napisz program, który pyta użytkownika o promień koła i oblicza oraz wyświetla jego pole powierzchni (użyj wzoru: pole = $pi * r^2, "gdzie" pi approx 3.14$). #super[Wskazówka: Wiedza z następnego rozdziału może być przydatna do rozwiązania tych zadań.] == Typy danych -W poprzednim rozdziale wprowadziliśmy koncept "pudełek" na dane, czyli zmiennych. W prawdziwym świecie, mamy różne rodzaje pudełek na różne przedmioty, nie wsadzimy przecież telewizora do pudełka po butach, bo się po prostu nie zmieści. Podobnie jest w naszych cyfrowych "pudełkach". Różne rodzaje danych wymagają różnych typów, które określają, jaki rodzaj wartości może być przechowywany w danej zmiennej oraz jak dużo miejsca w pamięci komputerowej ta wartość zajmuje. Wybór odpowiedniego typu danych jest kluczowy, ponieważ wpływa na wydajność programu oraz na to, jakie operacje można wykonywać na tych danych. O tym ile miejsca w pamięci zajmuje dany typ danych, decyduje architektura systemu operacyjnego na którym działa program (np. 32-bitowy lub 64-bitowy) oraz implementacja języka programowania. +W poprzednim rozdziale wprowadziliśmy koncept "pudełek" na dane, czyli zmiennych. W prawdziwym świecie, mamy różne rodzaje pudełek na różne przedmioty, nie wsadzimy przecież telewizora do pudełka po butach, bo się po prostu nie zmieści. Podobnie jest w naszych cyfrowych "pudełkach". Różne rodzaje danych wymagają różnych typów. To właśnie typ określa, jaką wartość można przechować w zmiennej. Decyduje on również o tym, ile miejsca ta wartość zajmie w pamięci komputera. Wybór odpowiedniego typu danych jest kluczowy, ponieważ wpływa na wydajność programu oraz na to, jakie operacje można wykonywać na tych danych. O tym ile miejsca w pamięci zajmuje dany typ danych, decyduje architektura systemu operacyjnego na którym działa program (np. 32-bitowy lub 64-bitowy) oraz implementacja języka programowania. + Poniżej omówię kilka podstawowych typów danych, które są powszechnie używane w programowaniu wraz z ich rozmiarem w pamięci na typowej 64-bitowej architekturze i przykłady ich zastosowania. #table( columns: (auto, auto, 1fr, auto), - inset: 8pt, + inset: 6pt, align: horizon, table.header([Typ danych], [Rozmiar w pamięci], [Zakres wartości], [Przykład wartości]), - "byte", "8 bitów", "0 do 255", "200", "sbyte", "8 bitów", "-128 do 127", "-100", "short", "16 bitów", "-32 768 do 32 767", "30000", @@ -131,6 +131,16 @@ Poniżej omówię kilka podstawowych typów danych, które są powszechnie używ "bool", "8 bitów", "true lub false", "true", ) +W tabeli powyżej przedstawiłem podstawowe typy danych w języku C\#. Oczywiście, istnieją też bardziej zaawansowane typy danych, takie jak tablice, listy, czy klasy, które omówię w dalszej części książki. + +Warto zauważyć, że mamy do typów liczbowych podział na liczby ze znakiem i bez znaku. Liczby ze znakiem (np. `int`, `long`) mogą przechowywać zarówno wartości dodatnie, jak i ujemne, natomiast liczby bez znaku (np. `uint`, `ulong`) mogą przechowywać tylko wartości dodatnie, ale za to mają większy zakres wartości dodatnich, ponieważ nie muszą rezerwować miejsca na liczby ujemne. + +Typ `float` jest typem zmiennoprzecinkowym pojedynczej precyzji, co oznacza, że przechowuje liczby z mniejszą dokładnością (około 7 cyfr znaczących). Natomiast `double` jest typem zmiennoprzecinkowym podwójnej precyzji, który przechowuje liczby z większą dokładnością (około 15-16 cyfr znaczących). Typ `decimal` jest używany głównie do obliczeń finansowych, ponieważ oferuje bardzo wysoką precyzję i unika problemów związanych z reprezentacją liczb zmiennoprzecinkowych. + +Możesz się zastanawiać, dlaczego typ `bool` zajmuje 8 bitów, skoro może przyjmować tylko dwie wartości: `true` lub `false`. Powodem jest to, że w większości architektur komputerowych, najmniejszą jednostką pamięci, którą można zaadresować, jest bajt (8 bitów). Dlatego nawet jeśli zmienna typu `bool` potrzebuje tylko jednego bitu do przechowywania swojej wartości, to i tak zajmuje cały bajt w pamięci. Aczkolwiek istnieją sposoby, by zaoszczędzić miejsce, na przykład poprzez pakowanie wielu wartości `bool` w jeden bajt, ale to już bardziej zaawansowany temat. + +W poprzednim rozdziale użyliśmy metody `Convert.ToInt32()`, aby przekonwertować dane wejściowe od użytkownika (które są w formie tekstowej) na liczbę całkowitą. Dzieje się tak dlatego, że metoda `Console.ReadLine()` zwraca wartość typu `string`, a my chcemy przechować tę wartość w zmiennej typu `int`. Próba bezpośredniego przypisania wartości zwróconej przez `Console.ReadLine()` do zmiennej `age` spowodowałaby błąd kompilacji, ponieważ typy danych muszą być zgodne. Programista, więc ma narzędzia do konwersji między różnymi typami danych, takie jak `Convert.ToInt32()`, które umożliwiają przekształcenie wartości z jednego typu na inny, o ile jest to logicznie możliwe, ale o konwersji między typami danych opowiem więcej w dalszej części książki. + == Instrukcje sterujące programem === Instrukcje warunkowe ==== Przykład