Odpowiedź :
Odpowiedź
Pierwszy załącznik zawiera program dla liczb całkowitych bez znaku (unsigned). Natomiast drugi zawiera wynik działania tego programu.
Trzeci załącznik zawiera program dla liczb całkowitych ze znakiem (signed). A czwarty wynik działania tego programu.
Wyniki z 2. załącznika pokazują, że dodanie 1 do największej liczby całkowitej bez znaku daje zero. Tak jest według ustaleń standardu C++. Na prawdę tak ma być. Podobnie (ale tylko podobnie!) jest z dodawaniem godzin. Czyli gdy masz godzinę 23:00 i dodasz jedną godzinę to dostajesz 0:00.
Jeżeli chodzi o dodanie 1 do największej liczby całkowitej ze znakiem, to wynik nie jest zdefiniowany przez standard języka C++. Różne kompilatory mają różne opcje pozwalające sprecyzować co ma się w takim przypadku stać. Nie napisałeś jakiego programu (środowiska) używasz do pisania w C++ tak więc nie mogę nic konkretniej napisać...
To co zamieściłam w załącznikach 2. oraz 4. jest wynikiem kompilacji i uruchomienia przy użyciu kompilatora g++ (GCC) poza środowiskami Code::Blocks, Dev-C++ oraz Visual Studio. Dodatkowo w piątym załączniku wynik uruchomienia przy pomocy kompilatora clang.
W załącznikach 4. i 5. widać, że można sprawić aby program pokazał, że jest błąd (załącznik 5.) lub zakończył działanie w przypadku wystąpienia błędu (załączniki 4. oraz 5.). Akurat nie mam pod ręką wersji g++ który ma działające obie te opcje, które ma clang z replit.
Wyjaśnienie
Tak jak programy z pytania brainly.pl/zadanie/21434013 te załączone tutaj działają pod Code::Blocks, Dev-C++ oraz Visual Studio. Natomiast tamte nie działają pod Linuxem, onlinegdb, programiz, replit itd., a te działają.
Powyższa różnica jest dzięki wierszowi #include <climits>.
Wprawdzie uważam, że użycie printf() jest dużo przejrzystsze, ale można być przyzwyczajoną do cout, więc tym razem z cout.
Wcale nie jest przypadkiem, że wyniki dla typów long oraz unsigned long są inne w tym zadaniu oraz w brainly.pl/zadanie/21434013 ! ! !
Otóż standard C++ wcale dokładnie nie definiuje ile bajtów mają zajmować zmienne typów całkowitych... Ciekawe jest też to, że wyniki mogą być różne nawet jeśli został użyty ten sam kompilator, co najłatwiej porównać używając g++. Otóż Code::Blocks oraz Dev-C++ używają g++, tylko że robią to inaczej. Skomplikowane? Tak. Dlatego lepiej nie używać typów long oraz unsigned long i ograniczyć się do typów int oraz long long (i ich wersji bez znaku).




