1 Востаннє редагувалося Betterthanyou (18.01.2017 08: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 09: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 11:51:56)

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

▼Прихований текст

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

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