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

Małe wyzwanie

VPS Starter Arubacloud
+2 głosów
427 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 587 wizyt
pytanie zadane 31 grudnia 2016 w Nasze projekty przez KubenQPL Maniak (62,820 p.)
0 głosów
3 odpowiedzi 956 wizyt
pytanie zadane 4 maja 2015 w Nasze projekty przez bartello88 Użytkownik (670 p.)
0 głosów
1 odpowiedź 452 wizyt
pytanie zadane 25 listopada 2017 w C i C++ przez Postal192 Początkujący (270 p.)

92,454 zapytań

141,262 odpowiedzi

319,089 komentarzy

61,854 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!

...