Program w pierwszym załączniku wprawdzie pisze do użytkownika po polsku, ale nie działa dla liczb ujemnych. I w ogóle jakiś taki skomplikowany się zrobił. :)
Program w drugim załączniku jest najprostszy i działa zarówno dla liczb dodatnich jak i ujemnych (oraz oczywiście zera... :) ).
Nie wiem jak jesteś oceniana, więc w trzecim załączniku jest program z drugiego załącznika uzupełniony o sprawdzanie, czy podana liczba mieści się w możliwościach programu. W wierszach 18 oraz 22 możesz pominąć (size_t) ale wstawiłam to celowo, bo wtedy jest super poprawnie.
Czwarty załącznik to trzeci program uzupełniony o akceptowanie liczb napisanych małymi literami, bo to się zgubiło pomiędzy drugim, a trzecim programem. Taki efekt uboczny... Wiersz 44 to taka magia, ale do zapamiętania: tak się tworzy z dowolnej zmiennej łańcuchowej zmienną w której występują tylko wielkie litery.
Piąty załącznik pokazuje jakie są możliwe maksymalne liczby w każdym z możliwych systemów od dwójkowego (podstawa 2) do trzydziestoszóstkowego (podstawa 36).
Wyjaśnienie
Wszystko powinno zacząć się od prezentacji na lekcji lub przeczytania w podręczniku o zarysie historii architektury komputerów i związanej z tym historii programowania. O tym, że bajt początkowo niekoniecznie miał 8 bitów. O tym, że pierwszy procesor Intela był 4-bitowy, a potem procesory Intela były po kolei 8-bitowe, 16-bitowe, 32-bitowe, 64-bitowe. Mam nadzieję, że taki rozdział w Twoim podręczniku jest, bo w polskiej Wikiреdii tego nie ma. Napisałam takie minimum minimalne.
Ale jaki to ma związek z programowaniem w C++? W C++ są następujące rodzaje (typy) liczb całkowitych, które współcześniezwykle mogą przyjmować następujące wartości
char od -128, do 127
short od -32768, do -32767
int od -2147483648, do 2147483647
long (to samo co int)
long long od -9223372036854775808, do 9223372036854775807
8-bitowe są char
16-bitowe są short
32-bitowe są int oraz long
64-bitowe są long long
Bardzo często, na przykład przy indeksowaniu tablic, w ogóle nie ma potrzeby rozważania liczb ujemnych. Zatem są również 8-, 16-, 32- oraz 64-bitowe typy unsigned (bez znaku)
unsigned char od 0, do 255
unsigned short od 0, do 65535
unsigned int od 0, do 4294967295
unsigned long (to samo co unsigned int)
unsigned long long od 0, do 18446744073709551615
Wszystkie powyższe stałe mają swoje oznaczenia, ostatnia to ULLONG_MAX.
Jest jeszcze size_t odpowiadający (współcześnie) albo unsigned int albo unsigned long long. Ale tego czemu odpowiada w ogóle nie musimy wiedzieć! Wystarczy wiedzieć, że indeksy tablic są size_t. Tak! Wiem, że zwykle w programie jest dla indeksu tablicy int, ale to tylko na początek nauki, na poziomie szkolnym.
Przechodząc do zadania... Zadanie nie zawiera żadnego ograniczenia co do zakresu liczb... Najprościej jest napisać program używający arytmetyki już wbudowanej w C++. Zwykle oznacza to używanie int. Podany w zadaniu przykład nie sugerował nic więcej... Natomiast najszerszy zakres liczb otrzymuje się używając unsigned long long oraz manipulując znakiem tak jak to zrobiłam. Więc przepisałam poprzedni program aby używał unsigned long long.
Odpowiedź
Program w pierwszym załączniku wprawdzie pisze do użytkownika po polsku, ale nie działa dla liczb ujemnych. I w ogóle jakiś taki skomplikowany się zrobił. :)
Program w drugim załączniku jest najprostszy i działa zarówno dla liczb dodatnich jak i ujemnych (oraz oczywiście zera... :) ).
Nie wiem jak jesteś oceniana, więc w trzecim załączniku jest program z drugiego załącznika uzupełniony o sprawdzanie, czy podana liczba mieści się w możliwościach programu. W wierszach 18 oraz 22 możesz pominąć (size_t) ale wstawiłam to celowo, bo wtedy jest super poprawnie.
Czwarty załącznik to trzeci program uzupełniony o akceptowanie liczb napisanych małymi literami, bo to się zgubiło pomiędzy drugim, a trzecim programem. Taki efekt uboczny... Wiersz 44 to taka magia, ale do zapamiętania: tak się tworzy z dowolnej zmiennej łańcuchowej zmienną w której występują tylko wielkie litery.
Piąty załącznik pokazuje jakie są możliwe maksymalne liczby w każdym z możliwych systemów od dwójkowego (podstawa 2) do trzydziestoszóstkowego (podstawa 36).
Wyjaśnienie
Wszystko powinno zacząć się od prezentacji na lekcji lub przeczytania w podręczniku o zarysie historii architektury komputerów i związanej z tym historii programowania. O tym, że bajt początkowo niekoniecznie miał 8 bitów. O tym, że pierwszy procesor Intela był 4-bitowy, a potem procesory Intela były po kolei 8-bitowe, 16-bitowe, 32-bitowe, 64-bitowe. Mam nadzieję, że taki rozdział w Twoim podręczniku jest, bo w polskiej Wikiреdii tego nie ma. Napisałam takie minimum minimalne.
Ale jaki to ma związek z programowaniem w C++? W C++ są następujące rodzaje (typy) liczb całkowitych, które współcześnie zwykle mogą przyjmować następujące wartości
char od -128, do 127
short od -32768, do -32767
int od -2147483648, do 2147483647
long (to samo co int)
long long od -9223372036854775808, do 9223372036854775807
8-bitowe są char
16-bitowe są short
32-bitowe są int oraz long
64-bitowe są long long
Bardzo często, na przykład przy indeksowaniu tablic, w ogóle nie ma potrzeby rozważania liczb ujemnych. Zatem są również 8-, 16-, 32- oraz 64-bitowe typy unsigned (bez znaku)
unsigned char od 0, do 255
unsigned short od 0, do 65535
unsigned int od 0, do 4294967295
unsigned long (to samo co unsigned int)
unsigned long long od 0, do 18446744073709551615
Wszystkie powyższe stałe mają swoje oznaczenia, ostatnia to ULLONG_MAX.
Jest jeszcze size_t odpowiadający (współcześnie) albo unsigned int albo unsigned long long. Ale tego czemu odpowiada w ogóle nie musimy wiedzieć! Wystarczy wiedzieć, że indeksy tablic są size_t. Tak! Wiem, że zwykle w programie jest dla indeksu tablicy int, ale to tylko na początek nauki, na poziomie szkolnym.
Przechodząc do zadania... Zadanie nie zawiera żadnego ograniczenia co do zakresu liczb... Najprościej jest napisać program używający arytmetyki już wbudowanej w C++. Zwykle oznacza to używanie int. Podany w zadaniu przykład nie sugerował nic więcej... Natomiast najszerszy zakres liczb otrzymuje się używając unsigned long long oraz manipulując znakiem tak jak to zrobiłam. Więc przepisałam poprzedni program aby używał unsigned long long.