1 Востаннє редагувалося Betterthanyou (18.01.2017 09:52:41)

Тема: Прості, але цікаві задачі

1) Дано функцію main, її не можна змінювати. Ваша задача написати клас myClass так, щоб перший раз вивелося 2000 а потім 0 (зараз виводиться 2000 2000, а має 2000 0)

int main(int argc, char *argv[])
{
    
    int myNum(0);

    {
        myClass x(myNum);
        myNum = 2000;
        cout << myNum << endl; // 2000
    }
    cout << myNum; // 0

    getchar();
    return 0;
}

(Друге завдання точно можна виконати на Visual Studio 2015 і QT (MinGW))

2)Дано два випадки
Перший

int a()
{
    return 0;
}

int b()
{
    cout << "Return 1";
    return 1;
}

Другий

int a()
{
    return 1;
}

int b()
{
    cout << "Return 1";
    return 1;
}

Тобто вся різниця між ними що в першому функція "а" повертає 0, а в другому 1

Задання
перевірити чи функція "а" повертає 1, якщо так то викликати функцію "b"
(в першому випадку немає викликатися функція "b", а в другому має)

Забороняється використовувати if, switch, "?"

3) Дано source.cpp файл, в якому є

#include "Header.h"

int main(int argc, char *argv[])
{
    
    cout << "\n+\n";

    return 0;
}


в source.cpp не можна нічого змінювати

Підказка

Можна змінювати вміст Header.h (вважати його пустим), також можна створювати будь яку кількість, будь яких, файлів

Завдання
Зробити так щоб на екран вивелося

Hello world!
+
Goodbye!



На цьому все, я їх вже зробив, до речі в останньому мені вдалося вивести Hello world! двома різними способами.

2

Re: Прості, але цікаві задачі

1.

myClass::myClass(int& x):tgt(&x),value(x){}
myClass::~myClass(){*tgt=value;}

2.

a()&&b()

3.

int main...
#define main hidden_main

Є і інші способи.

Подякували: Betterthanyou1

3 Востаннє редагувалося Betterthanyou (18.01.2017 10:14:30)

Re: Прості, але цікаві задачі

Про define я не здогадався, я робив так:

class MyClass
{
public:
    MyClass()
    {
        std::cout << "hello world!";
    }
    ~MyClass()
    {
        std::cout << "Goodbye!";
    }

private:

}obj;

Суть в тому що obj викличе конструктор, і в консоль виведеться Hello world!, далі виконається функція main, а після того спрацює деструктор.

Другий варіант (він не повністю виконає завдання)

auto &a = (std::cout << "Hello world!");

4

Re: Прості, але цікаві задачі

Давайте я вам інше завдання дам: завдання 2, але додатково заборонено використовувати &&,||,while і директиви препроцесора. Коротше, заборонено все, що створює розгалуження. Тільки лінійний код.

Подякували: 0x9111A1

5

Re: Прості, але цікаві задачі

Так ?

int (*arr[])() = { a, b };
(*arr[a()])();
Подякували: Yola, koala, 0x9111A3

6 Востаннє редагувалося Betterthanyou (18.01.2017 12:51:56)

Re: Прості, але цікаві задачі

Прихований текст
Коли я прочитав що заборонено розгалуження, я зразу здогадався що йде мова про масив функцій, я навіть таку тему раніше створював http://replace.org.ua/topic/3582/
Подякували: koala1