c++ (zadanie w załączniku)

testy:
Wejście:
2 13
110010110100111
Wyjście BACA

Wejscie
10 35
51501985131663860
Wyjście INFORMATYKA

Wejście
2 35
1000011011011111001000110
Wyjście BRAWO

+1 w załączniku


C Zadanie W Załączniku Testy Wejście 2 13 110010110100111 Wyjście BACA Wejscie 10 35 51501985131663860 Wyjście INFORMATYKA Wejście 2 35 100001101101111100100011 class=

Odpowiedź :

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.

Zobacz obrazek 0AB
Zobacz obrazek 0AB
Zobacz obrazek 0AB
Zobacz obrazek 0AB