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

Małe wyzwanie

42 Warsaw Coding Academy
+2 głosów
563 wizyt
pytanie zadane 18 czerwca 2015 w C i C++ przez Radfler VIP (101,030 p.)
edycja 19 czerwca 2015 przez Radfler

Wpadło mi dosyć ciekawe zadanie. Oto treść:

Napisz program który przyjmie od użytkownika wartość całkowitą (tylko raz!), następnie podzieli ją przez dwa i odejmie 5, a rezultat wypisze na ekran. Są jednak pewne utrudnienia:

- zakaz używania operatorów arytmetycznych, bitowych, logicznych, relacji czy przypisania (dotyczy to też tych przeładowanych),

- można korzystać tylko z dwóch plików nagłówkowych: <cstdio> oraz <bitset>

- nie wolno używać średników (';'),

- kompilator nie może pokazywać ostrzeżeń.

Zadanie jest jak najbardziej wykonalne! Przykładowe we/wy:

Wejście:
a) 40
b) 10
c) 91
d) 7

Wyjście
a) 15
b) 0
c) 40
d) -2

Zapraszam do zabawy :) Czekam na jakieś "ciekawe" kody :D

PODPOWIEDŹ: przecinki...?

4 odpowiedzi

+2 głosów
odpowiedź 19 czerwca 2015 przez daan Pasjonat (17,640 p.)
wybrane 18 kwietnia 2016 przez Radfler
 
Najlepsza

Zrobione (chyba) xD Kod wrzucać tu czy może wysłać Ci na pw ? :D

Edit. Co powiesz na takie rozwiązanie ? :>

#include <cstdio>
#include <bitset>

int main(int argc, char* argv[])
{
	while (scanf_s("%d", &argc), printf("%d\n", std::minus<int>()(div(argc, 2).quot, 5))) {}
}

 

komentarz 19 czerwca 2015 przez Radfler VIP (101,030 p.)
Wrzucaj tu :D
komentarz 19 czerwca 2015 przez daan Pasjonat (17,640 p.)
nie ma problemu :D
komentarz 19 czerwca 2015 przez Radfler VIP (101,030 p.)

Kod jak dla mnie dobry, tyle że wyrzuca mi błędy kompilacji:

1. Nie ma funkcji scanf_s(),

2. Oraz nie ma funkcji div(), która jest w <cstdlib>.

No i malutki błąd: program działa w nieskończoność, a powinien spytać tylko raz ;)

komentarz 19 czerwca 2015 przez daan Pasjonat (17,640 p.)
To z pętlą to nie jest błąd :P poza tym wystarczy zamiast while dać if i zapyta raz :D a co do błędów mi w Visual Studio Community 2013 nie wywala żadnych błędów i tym sie kierowałem, jak użyłem zwykłego scanf to właśnie pojawił się błąd :D wiec uzyłem scanf_s które według msdn ma po prostu lepsze "zabezpieczenia" xd
komentarz 19 czerwca 2015 przez Radfler VIP (101,030 p.)
No chyba, że tak! Ja korzystam z C::B więc mam trochę inaczej ;)
komentarz 19 czerwca 2015 przez daan Pasjonat (17,640 p.)
no to takie konflikty są normalne :D ale nasze kody są całkiem podobne :D high five ! xD
+2 głosów
odpowiedź 19 czerwca 2015 przez Radfler VIP (101,030 p.)

Wstawiam też moje kody.

1.  W tym wykorzystałem argumenty z linii wywołania programu oraz fakt, iż nagłówek <bitset> inkluduje też <functional>:

#include <cstdio>
#include <bitset>

int main(int x, char**) {

    while(scanf("%d", &x), printf("%d", std::minus<int>()(std::divides<int>()(x, 2), 5)), false) { }
}

2. A w tym wykorzystałem lambdę:

#include <cstdio>
#include <bitset>

int main() {

    while( [](int x){ while(scanf("%d", &x), printf("%d", std::minus<int>()(std::divides<int>()(x, 2), 5)), false) { } }(0), false) { }
}

 

komentarz 19 czerwca 2015 przez draghan VIP (106,230 p.)

Fajna ciekawostka. Ode mnie yes.

+1 głos
odpowiedź 18 czerwca 2015 przez draghan VIP (106,230 p.)
Ciekawe zadanie. :)

Jesteś absolutnie pewny, że można wypisać cokolwiek na stdout bez użycia średnika?
komentarz 18 czerwca 2015 przez Radfler VIP (101,030 p.)
Tak. Mam nawet swój kod, który wstawię jutro :p
komentarz 18 czerwca 2015 przez draghan VIP (106,230 p.)
To ja w takim razie umywam łapki - nie mam pojęcia bladego, jak napisać cokolwiek prócz pustej funkcji bez średnika. Albo to jest zbyt oczywiste. ;D

Czekam z niecierpliwością na rozwiązanie! :)
komentarz 18 czerwca 2015 przez Buby Pasjonat (19,590 p.)
Na upartego możnaby skorzystać z własności funkcji printf, do której można podać nieokreśloną liczbę argumentów, a co za tym idzie po przecinku wywołać inną funkcję. Czy jednak się mylę? :D

Przecinek jest także operatorem, tworzącym wyrażenie, więc pewnie autor z podpowiedzią miał na myśli coś podobnego - np. jedna pętla while, w której użyjemy zagnieżdżonych funkcji? ;>
komentarz 18 czerwca 2015 przez Radfler VIP (101,030 p.)

po przecinku wywołać inną funkcję

Idziesz w dobrym kierunku ;)

+1 głos
odpowiedź 19 czerwca 2015 przez niezalogowany
Kombinator :) czekam na kod jestem niezmiernie ciekawy tego kodu

Podobne pytania

+4 głosów
3 odpowiedzi 765 wizyt
pytanie zadane 31 grudnia 2016 w Nasze projekty przez KubenQPL Maniak (62,840 p.)
0 głosów
3 odpowiedzi 1,239 wizyt
pytanie zadane 4 maja 2015 w Nasze projekty przez bartello88 Użytkownik (670 p.)
0 głosów
1 odpowiedź 572 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez Postal192 Początkujący (270 p.)

93,377 zapytań

142,379 odpowiedzi

322,528 komentarzy

62,726 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

VMware Cloud PRO - przenieś swoją infrastrukturę IT do chmury
...