• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Program przeliczający liczbę z jednego systemu liczbowego na drugi

VPS Starter Arubacloud
+1 głos
610 wizyt
pytanie zadane 22 czerwca 2016 w Nasze projekty przez obl Maniak (51,280 p.)

Witam.

Napisałem sobie ostatnimi czasy w C++ mały konsolowy programik do przeliczania liczb zapisanych w systemie o podstawie od 2 do 36 na inny system również o podstawie od 2 do 36. Programik dostępny jest na mojej stronie tutaj.

2 odpowiedzi

+4 głosów
odpowiedź 22 czerwca 2016 przez draghan VIP (106,230 p.)
wybrane 22 czerwca 2016 przez obl
 
Najlepsza

Nie ma kodu, więc w zasadzie nie ma czego oceniać. Mogę napisać tylko to, co widać.

Z plusów:

  • Program poprawnie przelicza systemy.
  • Nie udało mi się go zepsuć.

Z minusów:

  • Program dostępny tylko na jedną platformę.
  • Przy podaniu liczby ujemnej przydałoby się poinformować od razu, że program takich liczb nie obsługuje.
  • Dla wprowadzonego zera jako liczby do przeliczenia, rezultat nie jest prawidłowy.
  • Przy pobieraniu T/N powinieneś przewidzieć i zablokować możliwość podania innego znaku.
  • Jednak udało mi się go zepsuć - nie sprawdzasz poprawności wejścia przy pobieraniu liczby.

Ogólnie jeszcze trochę do poprawy, ale ogólnie ujdzie. ;)

komentarz 22 czerwca 2016 przez obl Maniak (51,280 p.)

Program dostępny tylko na jedną platformę. - to się da załatwić, wystarczy, że przekompiluję pod Linuksem i będzie na dwóch platformach:)

Przy podaniu liczby ujemnej przydałoby się poinformować od razu, że program takich liczb nie obsługuje. - słuszność jest po twojej stronie.

Przy pobieraniu T/N powinieneś przewidzieć i zablokować możliwość podania innego znaku. - w sumie racja, ale dla mnie domyślnie pod nie mieści się każdy inny znak niż t lub T.

Jednak udało mi się go zepsuć - nie sprawdzasz poprawności wejścia przy pobieraniu liczby. - a co żeś draniu mu na wejście podał, że się biedak wywalił (jeśli tajemnicą wielką to nie jest)?

Kodu nie udostępniam bo to zadanie jest na SPOJ-u, więc nieuczciwie by było udostępniać.

komentarz 22 czerwca 2016 przez niezalogowany
Przecież jest reprezentacja ujemnych liczb binarnych np, to dlaczego ma nieobsługiwać? Być może się mylę ale kod uzupełnieniowy do dwóch załatwia tę sprawę, prawda? Czy gdzieś co pomyliłem?
komentarz 22 czerwca 2016 przez draghan VIP (106,230 p.)
edycja 22 czerwca 2016 przez draghan

Przy pobieraniu T/N powinieneś przewidzieć i zablokować możliwość podania innego znaku. - w sumie racja, ale dla mnie domyślnie pod nie mieści się każdy inny znak niż t lub T.

Dla Ciebie może tak, ale dla mnie jasne jest, że t/T to tak, n/N to nie, a każdy inny znak jest niedozwolony i może być zwykłą pomyłką. ;)

a co żeś draniu mu na wejście podał, że się biedak wywalił (jeśli tajemnicą wielką to nie jest)?

Jakikolwiek znak (inny niż cyfrę) przy podawaniu podstawy systemu liczbowego.

Kodu nie udostępniam bo to zadanie jest na SPOJ-u, więc nieuczciwie by było udostępniać.

Popieram. :)

Przecież jest reprezentacja ujemnych liczb binarnych np, to dlaczego ma nieobsługiwać? Być może się mylę ale kod uzupełnieniowy do dwóch załatwia tę sprawę, prawda? Czy gdzieś co pomyliłem?

Nie pomyliłeś, ale zauważ, że ten U2 jest w porządku tylko dla reprezentacji komputerowej systemu binarnego. Nic przecież nie stoi na przeszkodzie, żeby dostawić "normalny minus" przed każdą liczbą z każdego systemu (o ile tylko minus nie jest reprezentacją cyfry w danym systemie).

EDIT:

Wersja na Linuksa nie chce współpracować. :(

draghan@draghan-Satellite-A300:~/Pobrane > ./NumericSystem 
bash: ./NumericSystem: cannot execute binary file: Błędny format pliku wykonywalnego

 

komentarz 22 czerwca 2016 przez obl Maniak (51,280 p.)
edycja 22 czerwca 2016 przez obl

Wersję pod Windowsa poprawiłem. Co do wersji na Linuksa to nie wiem co jest nie tak. U mnie rusza, udostępniłem wersję release uzyskaną za pomocą CodeBlocka. Zaraz ściągnę i sprawdzę u siebie, czy działa. :(

Edit:

Cóż u mnie na Ubuntu program się uruchamia, co prawda z poziomu konsoli muszę go uruchamiać ale działa, nie spodziewałem się takiego problemu z uruchamianiem.:(

Edit2:

Tak, to była 64-bitowa wersja. Trochę się pomęczyłem i udało mi się stworzyć 32-bitową wersję dostępną tutaj. Mam nadzieję, że będzie działać. A dla przyszłych pokoleń jak chcecie skompilować 32-bitową wersję to trzeba wpisać w konsoli:

g++ -o nazwa_programu_po_kompilacji main.cpp -std=c++11 -m32

Sprawdzić, czy dany program jest 32 czy 64-bitowy można za pomocą polecenia file.

komentarz 22 czerwca 2016 przez draghan VIP (106,230 p.)
Być może winny jest mój 32-bitowy system.
komentarz 22 czerwca 2016 przez obl Maniak (51,280 p.)

Możliwe, ja mam 64-bitowy, później jeszcze popatrzę pod tym kątem, może uda mi się coś wykombinować.

Co ciekawe nie mogłem skompilować mojego programu na początku bo funkcji strupr nie ma, więc musiałem dopisać sobie ją samemu.

komentarz 25 czerwca 2016 przez draghan VIP (106,230 p.)

Czy funkcja strupr() jest częścią standardu? Nie ma jej w indeksie cppreference.com, nigdy o niej wcześniej nie słyszałem. Gdzie jej wcześniej używałeś, tzn. - jaki system operacyjny i kompilator?

komentarz 25 czerwca 2016 przez obl Maniak (51,280 p.)

Tak na Windowsie jest w standardzie i znajduje się w pliku nagłówkowym string.h

_CRT_NONSTDC_DEPRECATE(_strupr) _CRTIMP char * __cdecl strupr(_Inout_z_ char * _Str);

Nie jest to jakaś złożona funkcja, można sobie samemu napisać jej wersję (w moim przypadku działającą bezpośrednio na obiekcie klasy string), wystarczyło wykorzystać pętlę iteracyjną po elementach string-a i funkcję toupper.

komentarz 26 czerwca 2016 przez draghan VIP (106,230 p.)
Skoro jest dostępna tylko dla Windows, to nie jest w standardzie. ;) Standard określa funkcjonalność języka, którą powinien oferować każdy szanujący się kompilator niezależnie od platformy. ;)

W samej deklaracji funkcji zostało zaznaczone, że jest ona przestarzała ("deprecated").
+3 głosów
odpowiedź 22 czerwca 2016 przez Kornelia Kobiela Nałogowiec (33,340 p.)
Gdzie wersja na Linuxa, ja się pytam. Nie korzystam w JedynegoSłusznegoSystemu i niestety nie mogę powiedzieć nic więcej na temat programu.
komentarz 22 czerwca 2016 przez draghan VIP (106,230 p.)
Wine jest naprawdę użytecznym oprogramowaniem. :)
komentarz 22 czerwca 2016 przez obl Maniak (51,280 p.)
edycja 22 czerwca 2016 przez obl

Za chwilę bo muszę się przełączyć na Linuksa i go tam skompilować, a później na Windowsa żeby go wrzucić na mojego dropboxa.

Już wrzuciłem, link bezpośredni jest tutaj.

Podobne pytania

0 głosów
1 odpowiedź 261 wizyt
pytanie zadane 27 grudnia 2018 w C i C++ przez 0097 Nowicjusz (120 p.)
0 głosów
5 odpowiedzi 250 wizyt
pytanie zadane 7 maja 2017 w C i C++ przez Radosław Foltyński Obywatel (1,180 p.)
0 głosów
2 odpowiedzi 705 wizyt
pytanie zadane 1 kwietnia 2020 w C i C++ przez Atman Użytkownik (810 p.)

92,451 zapytań

141,261 odpowiedzi

319,073 komentarzy

61,853 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...