Форум программистов, компьютерный форум CyberForum.ru

Что делает данный код и зачем такое кому-нибудь может понадобиться? - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 47, средняя оценка - 4.74
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
08.06.2009, 23:57     Что делает данный код и зачем такое кому-нибудь может понадобиться? #1
Я ответил на вопрос,но точной формулировки не нашёл,хотел бы свериться(приложения с ответами нет).Задание:
Чёрный ящик.Что делается в данном примере?Зачем кому нибудь может понадобиться подобный код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void send (int* to,int* from,int count)
{
    int n = (count+7)/8;
    swith(count%8)
    {
           case 0: do { *to++=*from++;
           case 7:        *to++=*from++;
           case 6:        *to++=*from++;
           case 5:        *to++=*from++;
           case 4:        *to++=*from++;
           case 3:        *to++=*from++;
           case 2:        *to++=*from++;
           case 1:        *to++=*from++;
                            }  while(--n>0);
     }
}
Я так думаю,параметр count содержит количество незаполненных байт(или не байт,но кратно 8-ми) "чего-то",и копируется информация(из массива в массив),пока нужное количество элементов не скопируется.Только меня смущает одна штука:если count%8==7,то не рухнет ли вся программа из-за разорванного цикла?Может это ловушка,чтобы программа вылетела?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.06.2009, 23:57     Что делает данный код и зачем такое кому-нибудь может понадобиться?
Посмотрите здесь:

C++ Обьясните пожайлуста как и что делает данный оператор в этом выражении fState [x][y] ^= 1;. Неполный код привожу ниже.
Может кому понадобиться Выключение/перезагрузки компа и завершение сеанса C++
Что делает функция compare в коде и зачем она нужна в qsort C++
C++ Что делает данный цикл ?
зачем может понадобиться делать операторы виртуальными? C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.06.2011, 15:38     Что делает данный код и зачем такое кому-нибудь может понадобиться? #21
Evg, Евгений подскажите пожалуйста почему при (count%8)==4 я попадаю на метку 6:? при первом проходе.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
30.06.2011, 15:44     Что делает данный код и зачем такое кому-нибудь может понадобиться? #22
Цитата Сообщение от Evg Посмотреть сообщение
pragma, почитай тут, там я уже описывал семантику switch'а Проверьте себя. А хорошо ли вы знакомы со switch'ом?
А задачка и вправду прикольная. Где такое достаёшь? Если в институте, то хороший у вас преподаватель
Это из книги Страуструпа. Я б его на месте убил за такие конструкции... ))))
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.06.2011, 16:17     Что делает данный код и зачем такое кому-нибудь может понадобиться? #23
ValeryLaptev, Валерий, может вы подскажете?

Добавлено через 8 минут
все разобралсясорри

Добавлено через 7 минут
а где это можно применить? в книге вопрос по применению конструкции
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
30.06.2011, 16:35     Что делает данный код и зачем такое кому-нибудь может понадобиться? #24
Цитата Сообщение от AzaKendler Посмотреть сообщение
ValeryLaptev, Валерий, может вы подскажете?

Добавлено через 8 минут
все разобралсясорри

Добавлено через 7 минут
а где это можно применить? в книге вопрос по применению конструкции
Не применяй. НИГДЕ. НИКОГДА. И пошли Страуструпа нафиг с подобными конструкциями.
Ибо главное качество программы - читабельность. А потом уже эффективность.
Что толку в эффективности, если читающий программист не может внести изменения, поскольку не понимает, как такое может работать. И при внесении изменений НЕИЗБЕЖНО возникают ошибки.
Поэтому - НАФИГ Страуструпа с подобными конструкциями!
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
30.06.2011, 16:50     Что делает данный код и зачем такое кому-нибудь может понадобиться? #25
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Ибо главное качество программы - читабельность
Не всегда. Есть критичные к производительности куски программы. А потому писать их надо с приоритетом высокой производительности. А вместо читабельности писать развёрнутые комментарии. По современным меркам оптимизирующие компиляторы во многих случаях сделают качественный код независимо от того, какой из способов написания выбрал программист, но бывают случаи, когда компилятор не справляется с этой задачей. Или человек знает некоторые особенности, знания о которых нельзя дотащить до компилятора (пример с ходу привести не смогу).

Конкретно в случае с данным switch'ом код можно было бы разбить на два куска: preloop со switch'ом но без цикла и сам цикл. Код получился длиннее, но понятнее для людей. Да и наличие метки с переходом извне внутри цикла, постфактум на многих компиляторах приводит к тому, что компилятор отключает некоторые оптимизации (дабы не усложнять компилятор ради нескольких дебильных случаев).

Добавлено через 1 минуту
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Поэтому - НАФИГ Страуструпа с подобными конструкциями!
Это задание для учащихся. Причём задача "обратная": т.е. есть код, а надо разобраться, что он делает. Очень правильная постановка задачи. Преподавателям среднего и плохого уровня составлять подобные задания, как правило, не под силу
voral
346 / 326 / 46
Регистрация: 16.03.2008
Сообщений: 1,698
30.06.2011, 17:15     Что делает данный код и зачем такое кому-нибудь может понадобиться? #26
Блин ни как не могу раскурить вот этот кусок. (сократил лишнее)
Цитата Сообщение от #pragma Посмотреть сообщение
swith(count%8)
{
case 0: do { *to++=*from++;
case 7: *to++=*from++;
}while (--n>0)
}
Как этот do {} while работает. Когда начало в case 0........ Не как не укладывается в сознание
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.06.2011, 17:19     Что делает данный код и зачем такое кому-нибудь может понадобиться? #27
voral, выполни трассировку, поймешь
voral
30.06.2011, 17:44
  #28

Не по теме:


Офигеть.
Век живи - век учись

Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
30.06.2011, 17:50     Что делает данный код и зачем такое кому-нибудь может понадобиться? #29
Цитата Сообщение от voral Посмотреть сообщение
Как этот do {} while работает. Когда начало в case 0........ Не как не укладывается в сознание
Неочевидные ответы на простые вопросы раздел 6
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.06.2011, 18:08     Что делает данный код и зачем такое кому-нибудь может понадобиться? #30
а в чем смысл того что начало расположено в 0:? если вынести do над 0: тоже работает. в чем особый смысл располагать так?
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
30.06.2011, 18:26     Что делает данный код и зачем такое кому-нибудь может понадобиться? #31
Цитата Сообщение от Evg Посмотреть сообщение
Это задание для учащихся. Причём задача "обратная": т.е. есть код, а надо разобраться, что он делает. Очень правильная постановка задачи. Преподавателям среднего и плохого уровня составлять подобные задания, как правило, не под силу
Поработав 6 лет преподом, Страуструп НИ ОДНОЙ подобной задачи для студентов не написал в своей новой книжке... Поэтому данное упражнение - это не для студентов, а для экспертов.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
30.06.2011, 18:31     Что делает данный код и зачем такое кому-нибудь может понадобиться? #32
Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Поработав 6 лет преподом, Страуструп НИ ОДНОЙ подобной задачи для студентов не написал в своей новой книжке... Поэтому данное упражнение - это не для студентов, а для экспертов.
уровень знаний падает да и книжка новая для новичков
ValeryLaptev
Эксперт C++
1005 / 784 / 46
Регистрация: 30.04.2011
Сообщений: 1,595
30.06.2011, 18:37     Что делает данный код и зачем такое кому-нибудь может понадобиться? #33
Цитата Сообщение от Maxwe11 Посмотреть сообщение
уровень знаний падает да и книжка новая для новичков
Не... Уровень знаний не падает. Просто у Страуструпа пришло, наконец, понимание, что разработка ПО - это не есть трюки с программным кодом...
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
30.06.2011, 20:09     Что делает данный код и зачем такое кому-нибудь может понадобиться? #34
Цитата Сообщение от AzaKendler Посмотреть сообщение
а в чем смысл того что начало расположено в 0:? если вынести do над 0: тоже работает. в чем особый смысл располагать так?
А в чём смысл писать цикл "for", если можно писать цикл "while"? Ну вот захотелось, и написали так

Цитата Сообщение от ValeryLaptev Посмотреть сообщение
Поэтому данное упражнение - это не для студентов, а для экспертов.
Для экспертов - это когда есть постановка задачи, требуется написать код. А вот когда есть код, и человек с ходу не втыкает шозанах и ему приходится где-то искать объяснение, то это по крайней мере сподвигает человека к самостоятельному поиску. А не так, чтобы тупая задача после прочтённого материала, где нужно слегка изменить пример, который читали на лекции
voral
346 / 326 / 46
Регистрация: 16.03.2008
Сообщений: 1,698
30.06.2011, 20:13     Что делает данный код и зачем такое кому-нибудь может понадобиться? #35
Цитата Сообщение от Evg Посмотреть сообщение
А в чём смысл писать цикл "for", если можно писать цикл "while"? Ну вот захотелось, и написали так
На мой взгляд если вынести до "case 0" - было бы понятнее, удобнее для вопсприятия
AzaKendler
 Аватар для AzaKendler
214 / 116 / 9
Регистрация: 30.05.2011
Сообщений: 1,772
30.06.2011, 20:17     Что делает данный код и зачем такое кому-нибудь может понадобиться? #36
Цитата Сообщение от Evg Посмотреть сообщение
А в чём смысл писать цикл "for", если можно писать цикл "while"? Ну вот захотелось, и написали так
я это потому спросил, что это немного путает. тут еще народ спрашивал "как так".Выходит просто так от балды, для пущей путаницы
Evg
Эксперт С++Автор FAQ
 Аватар для Evg
16833 / 5254 / 323
Регистрация: 30.03.2009
Сообщений: 14,145
Записей в блоге: 26
30.06.2011, 20:29     Что делает данный код и зачем такое кому-нибудь может понадобиться? #37
Цитата Сообщение от AzaKendler Посмотреть сообщение
Выходит просто так от балды, для пущей путаницы
Может потому что так получилось. А может, чтобы дополнительно заставить человека подумать. Это ведь задача
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.06.2011, 21:13     Что делает данный код и зачем такое кому-нибудь может понадобиться?
Еще ссылки по теме:

C++ Скажите, что делает данный код?
Что делает данный цикл? C++
Что делает данный код? C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
voral
346 / 326 / 46
Регистрация: 16.03.2008
Сообщений: 1,698
30.06.2011, 21:13     Что делает данный код и зачем такое кому-нибудь может понадобиться? #38
Цитата Сообщение от Evg Посмотреть сообщение
Может потому что так получилось. А может, чтобы дополнительно заставить человека подумать. Это ведь задач
Воспитание иммунитета к индусам в команде
Yandex
Объявления
30.06.2011, 21:13     Что делает данный код и зачем такое кому-нибудь может понадобиться?
Ответ Создать тему
Опции темы

Текущее время: 02:53. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru