41

Re: Цікаві задачі

Очі.завидющі написав:

А я вже подумав про опцію для лінкера, яка встановлює місцем запуску іншу процедуру.

Хочу це побачити. :3

42

Re: Цікаві задачі

Сподобалась тема!

У мене також є цікава задача:


1. є деякий клас, в якому обов"язково є 1 віртуальна функція, яка не працює з данними класу але

щось виводить на екран.

об"явлення класу є. Як викликати цю функцію не використовуючи її ім"я?

43

Re: Цікаві задачі

Тарас написав:

Сподобалась тема!

У мене також є цікава задача:


1. є деякий клас, в якому обов"язково є 1 віртуальна функція, яка не працює з данними класу але

щось виводить на екран.

об"явлення класу є. Як викликати цю функцію не використовуючи її ім"я?

Покажчиком на функцію.

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

Змахує на лабу, судячи з одинички на початку... :)

44 Востаннє редагувалося User 298 (21.06.2013 15:41:06)

Re: Цікаві задачі

Так, це була лаба  :)
Ось моя реалізація -

#include <iostream.h>

class A {
     public:
     virtual void func() { cout << " Welcom to A"<<endl; }
};

typedef void (*func_type)();

int main()
{
    A a = new;
  
 
    func_type* vptb = *reinterpret_cast<func_type**>( &a );       
    
    vptb[0](); 
 
    system ("PAUSE");     
    return 0;
}

Bartash: код варто брати у теги code.

45

Re: Цікаві задачі

Я от не можу докумекати як реалізувати наступне:

Є клас в якому об"явлено метод і елемент типу int.
Через вказівник на об"єкт класу викликається метод, який повертає значення елементу int. Як не змінюючи реалізацію класу забезпечити, щоб при виклику метода через вказівник викликався не він, а моя глобальна функція, яка змінить елемент питу int помноживши його на 10 ?

Важливо - спадкування використовувати не можна; відповідно не можна створювати нових класів.

46

Re: Цікаві задачі

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

Хай допоможе тобі operator ->, падаване юний!

Подякували: Тарас1

47

Re: Цікаві задачі

Тобто ви маєте на увазі, що потрібно перевантажити operator-> ?
А хіба для перевантаження цього operatorа не доведеться змінювати реалізацію класу?
І на скільки я знаю operator-> обов"язково має бути методом, а не глобальною функцією ??

48 Востаннє редагувалося koala (19.06.2013 19:06:39)

Re: Цікаві задачі

Дійсно, не подумав. Хм...
"Викликається через вказівник" - що це означає? В C++ можна придумати кілька варіантів. Можна використовувати будь-який?

49 Востаннє редагувалося koala (19.06.2013 19:12:34)

Re: Цікаві задачі

Уточнення: незмінній фрагмент коду має бути таким:

class OneMethod
{
  public:
    int x;
    int getX(){return x;}
};

...
OneMethod om, *pom=&om;
om.x=5;
cout << pom->getX();//виводить 50

чи можна гратися усіма умовами ("виклик методу через вказівник" - не pom->getX(), а (*pom).getX(); int може бути статичним - не сказано ж іншого; і т.д.)?

50 Востаннє редагувалося koala (19.06.2013 19:15:57)

Re: Цікаві задачі

А якщо так...
class fakeint
{
  //робимо все, що нам заманеться
};
#define int fakeint
//а тепер наш код...

51

Re: Цікаві задачі

Можна "гратися" усіма умовами.
Головне, щоб у класі був тільки один метод, наприклад F() і елемент типу int.
А також дано, що у мейні вже є вказівник на об"єкт через який викликається метод F()
наприклад :
A *p;
p->F();

І як не змінюючи ці умови зробити так, щоб при виклику p->F(); викликався не метод F(), а нова моя функція, яка не є методом і, яка змінить елемент класу типу int.

От я і не можу придумати як зробити цю заміну функцій :(

52 Востаннє редагувалося koala (25.09.2013 09:45:09)

Re: Цікаві задачі

gavno_vopros написав:

Привіт, допоможіть написати програму для знаходження НСД(найбільшого спільного дільника) 2х натуральних чисел. С++

Привіт, терміново прочитайте правила, особливо пп. 3.3-3.6.

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

53

Re: Цікаві задачі

koala написав:

Пане dmkdok, я б вам відповів, але вже зробив це місяць тому в повідомленні якраз перед вашим...
cuhedg: а без умовного оператору зможете?

Я зможу =)

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

54

Re: Цікаві задачі

Chemist-i: а без функцій? Тут має вистачити однієї математики.

55

Re: Цікаві задачі

koala написав:

Chemist-i: а без функцій? Тут має вистачити однієї математики.

Звичайно:

Прихований текст
    unsigned char s[] = "22Mama mila ramu";
    int numberOfSymb = 0;
    int x = ((((s[numberOfSymb]) - 0x30 & 0xF0) - 0x0A)>>0x08)+0x01;
        
    char answer [2][7] = {"number", "text"};
    printf("%s \n", answer[x]);

56 Востаннє редагувалося koala (18.10.2013 19:59:32)

Re: Цікаві задачі

Моє рішення (c-символ, повністю розписувати не бачу сенсу):

Прихований текст
int x = ((417.1-abs(c-42)-abs(c-51))/408.0);

57

Re: Цікаві задачі

koala

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

Стрес-тест

    int irerCount = 100000000;
    int t;
    unsigned char s[] = "22Mama mila ramu";
    int numberOfSymb = 0;
    int x;
    char c = s[numberOfSymb];
    

    t = GetTickCount();
    for (int i=0; i<irerCount; i++)
    {
        //koala
        x = ((417.1-abs(c-42)-abs(c-51))/408.0);
    }
    printf("koala time=%d ms\n", GetTickCount()-t);
    char answer [2][7] = {"text", "number"};
    printf("%s \n", answer[x]);

    t = GetTickCount();
    for (int i=0; i<irerCount; i++)
    {
        //Chemist-i
        x = ((((s[numberOfSymb]) - 0x30 & 0xF0) - 0x0A)>>0x08)+0x01;
    }
    printf("Chemist time=%d ms\n", GetTickCount()-t);
    char answer2 [2][7] = {"number", "text"};
    printf("%s \n", answer2[x]);

http://s016.сайт-злодій/i334/1310/01/27849fb30143.png

про компактність і сопроцесор я вже мовчу

58

Re: Цікаві задачі

А я і не кажу, що моє рішення оптимальне. Але використовує воно тільки шкільну математику, на відміну від вашого.

Подякували: Chemist-i1

59

Re: Цікаві задачі

Переписати елементи, розташовані вище допоміжної діагоналі в одновимірний масив S1, а  елементи, розташовані нижче допоміжної діагоналі в одновимірний масив S2.

Допоможіть з такою задачою)

60

Re: Цікаві задачі

tarassinyo13 написав:

Переписати елементи, розташовані вище допоміжної діагоналі в одновимірний масив S1, а  елементи, розташовані нижче допоміжної діагоналі в одновимірний масив S2.

Допоможіть з такою задачою)

Нецікаво ж.

Подякували: Chemist-i1