Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Написать нечитабельную программу, Страуструп P11.14[13] и P11.14[14] 
:(
    Опции темы
WhKitten
Дата 25.11.2010, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2010

Репутация: нет
Всего: нет



Помогите выполнить задание. Чтобы его выполнить, нужно, чтобы кто-нибудь написал совершенно нечитабельную программу на C++, в которой я потом должен разобраться, не запуская её. smile

Само задание:
P11.14[13] Напишите программу, которая будет совершенно нечитабельна из-за использования перегрузки операторов и макросов. Идея: определите +, имеющий смысл оператора - (и наоборот) для INT, затем напишите макрос, который заставлял бы int значить INT. Заместите часто употребляемые функции с использованием ссылок в качестве аргументов. Несколько неверных комментариев также создадут изрядную путаницу.
P11.14[14] Обменяйтесь результатами упражнения P11.14[13] с кем-нибудь из своих друзей. Не запуская, попытайтесь определить, что делает программа вашего приятеля. Теперь вы знаете чего не следует делать.

Свое решение 11.14[13] выложу, как напишу. smile
PM MAIL   Вверх
WhKitten
Дата 25.11.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2010

Репутация: нет
Всего: нет



Моё решение 11.14[13]. Жду другое решение 11.14[13], чтобы выполнить 11.14[14] и попрактиковаться в изучении C++ smile
Код

#include <iostream>
using std::cout;
using std::cin;
using std::endl;

class INT {
public:
    INT(int val = 0): _i(val) {}
    INT& operator= (int val) { _i = val; return *this; }

    INT& operator+= (INT& val) { val._i += _i; _i -= val._i; return val; }
    INT& operator-= (INT& val) { val._i -= _i; _i += val._i; return val; }
    INT& operator+= (const INT& val) { _i += val._i; return *this; }
    INT& operator-= (const INT& val) { _i -= val._i; return *this; }
    INT& operator+= (int val) { _i += val; return *this; }
    INT& operator-= (int val) { _i -= val; return *this; }

    INT& operator/= (const INT& val)
    { _i = (val._i == 0) ? 1 : _i/val._i; return *this; }

    friend std::ostream& operator<< (std::ostream& s, const INT& val);
    friend std::istream& operator>> (std::istream& s, INT& val);

    operator int() { return _i; }

private:
    int _i;
};

INT operator+ (const INT& v1, const INT& v2)
{
    INT r = v2;
    return r -= v1;
}

INT operator- (const INT& v1, const INT& v2)
{
    INT r = v1;
    return r += v2;
}

std::ostream& operator<< (std::ostream& s, const INT& val)
{
    return s << val._i;
}

std::istream& operator>> (std::istream& s, INT& val)
{
    return s >> val._i;
}

#define int INT

void main()
{
    int a, b;
    cout << "Enter a: "; cin >> a;
    cout << "Enter b: "; cin >> b;

    int c = a - b;
    cout << "c = a-b: " << c << endl;
    c += b;
    cout << "b += c: " << b << " " << c << endl;
    a -= b;
    cout << "a -= b: " << a << " " << b << endl;
    a += 1; 
    cout << "a += 1: " << a << endl;

    int d = (b/2);
    cout << "d = (b/2): " << d << endl;
    d = c - d;
    cout << "d = c-d: " << d << endl;
    int e = a;
    e /= d;
    cout << "e /= d: " << e << endl;

    cout << "Result: " << b+a+e+d-c << endl;
    
    system("pause");
}

PM MAIL   Вверх
A5uKa
  Дата 25.11.2010, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



Код

  template <class var_t, std::size_t C>
  (&(operator const var_t()))[C];

PM   Вверх
azesmcar
Дата 25.11.2010, 14:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Нечитабельную? smile Момент..
Код

%:include <iostream>

int main() <%
   int a<::> = <% 10, 20, 5, 7, 3, 9 %>;
   int s = 0;
   int x = sizeof(a) / sizeof(int);
   while (x --> 0) <%
      //???/
      if (x % 2 ??!??! a<:x:> % 2)
         s += x<:a:>;
   %>
   std::cout << s << std::endl;
%>

достаточно нечитабельно? smile
http://liveworkspace.org/code/b73594d3cead...7231dd6837d24a5

Это сообщение отредактировал(а) azesmcar - 25.11.2010, 14:49
PM   Вверх
WhKitten
Дата 25.11.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2010

Репутация: нет
Всего: нет



Цитата(A5uKa @  25.11.2010,  13:57 Найти цитируемый пост)
  template <class var_t, std::size_t C>
  (&(operator const var_t()))[C];

Если честно вообще ничего не понял. Понятно только, что это шаблон с типом данных var_t и размером C в качестве аргументов.
Мы выполняем оператор преобразования к const var_t, потом получаем адрес значения, увеличиваем его на С*sizeof(var_t) и возвращаем значение по этому адресу?
Цитата(azesmcar @  25.11.2010,  14:15 Найти цитируемый пост)
Нечитабельную?  Момент..

Тут вроде всё понятно - диграфы и триграфы, а ??/ это аналог \, т.е if (x % 2 ??!??! a<:x:> % 2) продолжение комментария. Но не понятна запись "x --> 0". Что такое "-->"? 
PM MAIL   Вверх
mimik
Дата 25.11.2010, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Цитата(WhKitten @  25.11.2010,  19:21 Найти цитируемый пост)
"x --> 0". Что такое "-->"? 

Код

x-- > 0


мой вариант
Код

int a = 10;
if (2 < a < 9)
    cout << "yes";
else
    cout << "no";


Это сообщение отредактировал(а) mimik - 25.11.2010, 19:48
PM   Вверх
azesmcar
Дата 25.11.2010, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



Цитата(WhKitten @  25.11.2010,  19:21 Найти цитируемый пост)
Что такое "-->"?  

хехе..а самое простое то не отгадал smile 
PM   Вверх
WhKitten
Дата 25.11.2010, 20:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2010

Репутация: нет
Всего: нет



Цитата(mimik @ 25.11.2010,  19:44)
Код

int a = 10;
if (2 < a < 9)
    cout << "yes";
else
    cout << "no";

int(2<a)=1
1<9, поэтому выведет yes.

--> реально, как то сбило с толку. Никогда не видел инкремент/декремент через пробел от переменной просто и показалось, что это какая то отдельная конструкция, хотя даже стандарт открыл и убедился, что её там нет smile 

Это сообщение отредактировал(а) WhKitten - 25.11.2010, 20:26
PM MAIL   Вверх
azesmcar
Дата 25.11.2010, 20:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 9
Всего: 211



WhKitten

хочешь плохого кода - иди на http://govnokod.ru/

PM   Вверх
mimik
Дата 25.11.2010, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


не Rohoss Я
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 1.11.2010

Репутация: нет
Всего: 2



Код

if (0.2 + 0.7 == 0.9)
    cout << "yes";
else
    cout << "no";

PM   Вверх
WhKitten
Дата 25.11.2010, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 44
Регистрация: 24.11.2010

Репутация: нет
Всего: нет



Цитата(mimik @  25.11.2010,  20:37 Найти цитируемый пост)
if (0.2 + 0.7 == 0.9)    cout << "yes";else    cout << "no";

Сравнение чисел с плавающей точкой. Числа с плавающей точкой не хранят точных значений, поэтому сравнивать их можно только с некоторой погрешностью, если я не ошибаюсь.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0616 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.