Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Интересные и занимательные задачи по программированию > Тест на знание С++ |
Автор: JAnty 7.12.2006, 12:38 | ||
Это обычный тест на знание С++
Постановка задачи: убрать с кода знаки "=". (Желательно, что бы оно ещё потом компилилось ![]() |
Автор: Earnest 7.12.2006, 12:57 |
Глупый тест. int a(0); и так далее. |
Автор: comp 8.12.2006, 17:34 |
#define a 0 #define b 1 #define c a + b |
Автор: JackYF 8.12.2006, 19:52 |
comp, неверно. В этом случае не создастся ни одной переменной, а их создавалось 3. Правильное решение написала Earnest. |
Автор: Dov 9.12.2006, 12:10 |
Гы-гы. ![]() Rockie, зачот. |
Автор: JackYF 11.12.2006, 15:33 |
Rockie, ![]() |
Автор: Xenon 11.12.2006, 17:37 |
А там вообще в задании просят ТОЛЬКО УБРАТЬ - прибавлять низя ![]() |
Автор: Dray 11.12.2006, 17:40 |
УЖОС и при этом чтоб компилилось! ![]() |
Автор: JackYF 11.12.2006, 18:12 | ||
Никто не говорил, что прибавлять нельзя ![]() Говорили, что надо убрать "=". ![]() Earnest - правильное решение. Rockie - повеселил народ ![]() |
Автор: En_t_end 12.12.2006, 14:12 | ||||
JackYF, JackYF - комментирует ЗЫ ты прям как маджик гуди блин ![]() Добавлено @ 14:20 кстати вот ещё решение(раз вы скобки добавили, значит можно не просто стирать '=' но и стирать другие интересные символы ![]()
имеется ввиду контекст:
Добавлено @ 14:22 но суть одна... суть примера Rockie ![]() |
Автор: Voldemar2004 13.12.2006, 11:17 | ||
JAnty, в С++ переменные можно инициализировать не только знаком =, но и скобками:
|
Автор: Xenon 13.12.2006, 15:02 |
Voldemar2004, Ну это, как бы, уже озвучили ![]() |
Автор: JackYF 13.12.2006, 15:41 |
Voldemar2004, Это еще что? ![]() И как ты при этом будешь итераторы стандартные использовать, мне интересно? |
Автор: UniBomb 14.12.2006, 20:42 | ||
Есть ещё маленькая загадка - вопрос. Многие конечно скажут что-то типа "баян", но те кто ни разу не наталкивался на неё пускай поробуют, подумают: переменной а присвоить значение переменной b, b присвоить значение переменной а без использования третьей переменной.
|
Автор: JackYF 14.12.2006, 20:56 |
UniBomb, для всех типов переменных ? ![]() |
Автор: UniBomb 14.12.2006, 20:58 |
JackYF, Начнём с int'ов... А там глядиш и будет универсальное решение для всех типов данных. |
Автор: JackYF 14.12.2006, 21:02 | ||
Какой минимальный набор операций должен поддерживать тип данных, по-твоему? |
Автор: UniBomb 14.12.2006, 21:06 |
JackYF, Как фишка ляжет. Хотя в принципе минимальный набор (плюс, минус, умножить, разделить, и, или) операций поддерживает каждый тип. Это если я тебя правильно понял... |
Автор: skyboy 14.12.2006, 21:08 | ||
|
Автор: JackYF 14.12.2006, 21:12 | ||
Я же и спрашивал ![]() Если же поддерживает -- skyboy ответил. Можно тоже же самое, только место -,+ -- xor. Хотя не думаю, что этот вопрос он слышал в первый раз. ![]() |
Автор: skyboy 14.12.2006, 21:12 | ||
|
Автор: Fazil6 14.12.2006, 21:17 | ||
|
Автор: UniBomb 14.12.2006, 21:22 |
skyboy, врое прально.... Fazil6, боюсь мои познания а си не настолько велики, что бы я смог понять твой код.... Есть ещё способ с использованием логичесих операций (если его не изобразил Fazil6).... |
Автор: JackYF 14.12.2006, 21:26 | ||
Именно его и изобразил. Это побитовый XOR. |
Автор: Dray 14.12.2006, 21:34 | ||
А теперь устроим свистопляску!
К а присвоить b, к b присвоить c, к c присвоить а. Без добавления переменных. |
Автор: Fazil6 14.12.2006, 21:51 |
и в чем задача? а меняем с b и потом с меняем с b |
Автор: Dray 14.12.2006, 22:02 |
And the winner is... ... Fazil6 !!! ![]() |
Автор: nikitao 14.12.2006, 22:34 |
Напомниет топик , где надо было Hello world написать как можно КРУЧЕ ![]() |
Автор: UniBomb 14.12.2006, 22:49 |
Что ж, превратим этот топик в сборник интересных задач, вот следующая - написать программу, которая выводила бы на экран саму себя. Самое короткое решенеие (жаль его не помню) уместилось в одной строке... |
Автор: JackYF 14.12.2006, 23:05 |
Все программы могут уместиться в одной строке. ![]() Строка, правда, длинная получится. |
Автор: UniBomb 14.12.2006, 23:09 |
JackYF, ну хорошо - в одной строке с приемлимой длинной. да и вообще, много разговариваеш! ![]() |
Автор: Rockie 15.12.2006, 01:31 | ||
угу, жаль.. Зато ты - много, лови минус. |
Автор: UniBomb 15.12.2006, 11:57 | ||
Rockie,
Это было бы хамством, если бы там стоял такой смайл - ![]() |
Автор: Любитель 15.12.2006, 13:05 |
А задача печати самой себя очень старая. Здесь рулят языки без всяких main-функций. Тогда такой пролграмой будет пустая програма. ![]() Условие только надо уточнить - не использовать внешних источников информации (а то из исходника прогу напечатаем, да и всё). |
Автор: UniBomb 15.12.2006, 14:04 |
Любитель, Хех, с внешними источниками данных всё равно придётся повыпендриваться, ведь получается что одним оператором всю прогу на экран не вывести... С добавлением нового оператора возникнет необходимость вывода этого оператора на экран, на следовательно ввод в программу нового оператора, для вывода того... В общём всё бесконечно запутано... |
Автор: Любитель 15.12.2006, 14:56 |
В смысле с внешними как раз всё тривиально. Мы читаем из файла main.cpp текст и пишем его на экран. Компилируем, ложим экзешку в папку с main.cpp, запускаем. |
Автор: UniBomb 15.12.2006, 17:03 |
Любитель, не, так не пойдёт... давай без внешних источников... |
Автор: Rockie 15.12.2006, 21:08 | ||||||
На http://ru.wikipedia.org/wiki/Quine#.D0.A1.D0.B8 лежит пример на Си.
Зато улыбнул пример на Brainfuck:
а в особенности это:
![]() |
Автор: Dov 15.12.2006, 21:17 |
![]() ![]() ![]() ![]() ![]() ![]() |
Автор: Любитель 18.12.2006, 15:09 |
Rockie, да замечание весёлое. ![]() |
Автор: ressac 19.12.2006, 20:37 | ||||
под Си это не пашет, под Си++ да. ![]() Добавлено @ 20:39
если ты про то что она показывает свой исходник, то помойму легче всего впихнуть рид файл и всё. |
Автор: Voldemar2004 19.12.2006, 23:13 |
Чтобы написать прогу, которая выводит саму себя - достаточно написать в ф-цию, считывающую файл - в качестве аргумента указать имя исходника. |
Автор: Любитель 20.12.2006, 13:43 |
Млин, я сказал - не использовать внешних источников данных. |
Автор: ressac 20.12.2006, 17:26 |
Любитель, ну тогда printf("..."); ![]() |
Автор: Любитель 20.12.2006, 17:37 |
Плохо говорить, когда ответ уже был. Если пытаться делать тривиально то тебе нужен бесконечный printf. |
Автор: DeMoNN 20.2.2009, 17:18 |
можно его в ресурсы запхать ![]() |
Автор: Goliaf777 29.3.2009, 16:43 |
Вот очень легкая задачка: зачем нужно перегружать стандартный оператор присваивания и конструктор копирования, при динамическом распределении памяти в классе? |
Автор: GoldFinch 29.3.2009, 22:08 |
чтоб члены класса - указатели не копировались в другой объект %) |
Автор: Rififi 29.3.2009, 23:11 | ||
что выведет программа? |
Автор: azesmcar 29.3.2009, 23:19 | ||
не вызван конструктор для std::string. хрень какую нибудь или access violation. |
Автор: azesmcar 1.6.2009, 01:21 | ||
и задача, может многие знают, встретил на брейнбенче, довольно интересная ![]()
|
Автор: GoldFinch 4.6.2009, 19:45 |
azesmcar, видимо total == 10 хотя непонятно зачем там int j; и зачем такие кривые идентификаторы |
Автор: azesmcar 4.6.2009, 19:53 | ||
нет, 10 было бы слишком просто ![]()
я бы сказал, но тогда другим будет неинтересно, попробуй скомпилировать и запустить. Думаю станет понятно. А если под дебагером посмотришь память - думаю вопросов не останется. Если что пиши в личку обясню. |
Автор: Любитель 4.6.2009, 20:36 |
Инкрементится указатель на A, он не знает о фактическом размере элементов массива, т. е. сдвиг будет на sizeof(A). А фактически - будут пройдены 5 элементов, сумма 15. Так? PS Блин, печально другое - вначале хотел сказать, что программа вывалится, так как выделили память только под массив, а не под сами объекты. Год работы с шарпом даёт о себе знать.. ![]() |
Автор: azesmcar 4.6.2009, 20:41 | ||||
Да, только будет пройдено на 5 а 10. Просто 5 из них будет прибавлено 1, для остальных 5-и будет прибавлена 2. Или мы о разном. В итоге - 15, все абсолютно верно. ![]()
![]() ![]() |
Автор: newsl 1.11.2009, 16:10 |
#include<iostream> using namespace std; int main () { int a(3); int b(9); a+=b; b-=a; a+=b; b*=~0; cout<<a<<endl; cout<<b<<endl; system ("pause"); return 0; } |
Автор: Belirafor 4.11.2009, 00:21 |
сорри не туда! |