|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
Функция должна принять указатель на саму себя07.01.2014, 22:48. Показов 5377. Ответов 46
Метки нет (Все метки)
не рекурсия. (ошибка в названии)
Функция должна принять указатель на саму себя. моя неверная попытка имеет вид
0
|
||||||
| 07.01.2014, 22:48 | |
|
Ответы с готовыми решениями:
46
Зачем функция вызывает саму себя? Функция должна возвращать указатель на первый элемент массива,удовлетворяющий условию Подскажите немножко с рекурсией ( Функция должна вызывать сама себя до тех пор пока sum не станет больше х) |
|
быдлокодер
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,705
|
|
| 08.01.2014, 20:03 | |
|
Чуть подумав, понимаешь, что этого не может быть потому, что этого не может быть никогда. Разве что обмануть компилятор. Но смысл?
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||
| 21.09.2015, 17:20 | ||||||
|
http://rextester.com/SBI46430
2
|
||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 21.09.2015, 17:34 [ТС] | ||
|
Как бы я в этом коде ничего не понял. Небольшие разъяснения наиболее важных участков могут оказаться полезны не только мне.
0
|
||
|
Неэпический
|
|
| 21.09.2015, 17:41 | |
|
daslex, это не реализуемо
Добавлено через 1 минуту В древности этим преподаватели якобы"убивали" зарвавшихся студентов
2
|
|
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 21.09.2015, 17:42 [ТС] | |
|
Croessmah, мне не верят. Я в курсе.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
||||||
| 21.09.2015, 18:23 | ||||||
|
daslex,
Без хаков с приведением типов и используя лишь функции С++ это не реализуемо. Концептуально. По очень простой причине. Функции в С++ не объекты первого класса. В этом нет ничего удивительного, т.к. концепция функции унаследована из С, который не задумывался как объектно-ориентированный язык. Зато С++ предоставляет альтернативный механизм - функторы. Функторы - это функциональные объекты, и они являются объектами первого класса. Поэтому такой код в С++ будет работать и в какой-то степени решает поставленную задачу: Кликните здесь для просмотра всего текста
1
|
||||||
| 21.09.2015, 18:27 [ТС] | |
|
Не по теме: Да мне не надо это доказывать. Эта тема воскресла потому как я дал на нее ссылку из другой темы. Я имел наглость заявить, что С++ умеет не всё и мне, разумеется, никто не поверил. Эта тема под руку попалась как одна из небольшого множества нерешаемых задач, которые я видел и которую я смог вспомнить.
0
|
|
|
19501 / 10106 / 2461
Регистрация: 30.01.2014
Сообщений: 17,825
|
|||
| 21.09.2015, 18:40 | |||
|
Тут нужна железная аргументация, а не попытки холиварить ![]() Многие, кто с тобой спорит, на самом деле знают, что этого сделать в чистом виде нельзя. Но из-за слабой аргументации с твоей стороны, не могут себе позволить просто так сдаться. Например, в соседней теме ты категорически не прав, приплетая boost, как доказательство того, что С++ чего-то не может. Вот этот пример, с функцией - доказательство. Слабое, т.к. есть эмулирующие механизмы, но это не важно, факт есть факт - нельзя. А вот boost и вообще библиотеки на С++ - это не в кассу. Знаешь почему? Потому что любой плюсовик знает, что концепция языка закладывалась с тем расчетом, чтобы получить относительно маленькое ядро языка, но которое позволяет с помощью своих возможностей реализовать практически любую функциональность. Почитай Страуструпа. Они в комитете иногда намеренно не вносили изменения в стандарт. Потому что было известно, что это хорошо реализуется на уровне библиотеки. Да, черт возьми, библиотека iostreams отдельно от языка - это намеренное опровержение от Страуструпа утверждения, что якобы нельзя сделать эффективную библиотеку ввода-вывода вне ядра языка. Поэтому приводя аргументом boost, ты вызываешь когнитивный диссонанс. Не может средству, которое задумывалось как "набор инструментов, чтобы построить почти любой дом" вменяться в вину, что оно выполняет свое прямое назначение. Это нонсенс. Почитай "Дизайн и Эволюцию". Хочешь воевать на этом поле - изучай материал. Наехать на С++ можно. У него много изъянов, но надо знать язык, чтобы в них попадать. Добавлено через 1 минуту Я не доказываю тебе ничего. Я тебе расставляю точки над i. Чтобы ты знал куда давить в таких спорах. Об образовании твоем забочусь, между прочим
4
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 21.09.2015, 18:46 [ТС] | |
|
Пусть с boost я категорически не прав. От boost я перешел к WinApi. Смысл абсолютно тот же самый, когда я сослался на Boost. Всё из этой же оперы почему я на него сослался.
Но об этом всем надо в той теме писать. Тут по этой, там по той. Возражаю как умею.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 21.09.2015, 18:56 | |||||||
|
это тоже самое, что и foo(&foo); следущий пример иллюстрирует это положение: http://rextester.com/BICQ84301
1
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||||||
| 21.09.2015, 19:09 [ТС] | ||||||
|
Вот же блин. Это не совсем то же самое. У указателя, если его создать, будет свой собственный адрес памяти, отличный от адреса foo. И его при необходимости можно перенаправить, в отличии от &foo, так как непосредственно у foo адрес поменять невозможно.
Может я не очень грамотно выражаюсь, но псевдокод
Притягивать за уши не надо. Решения нет. Добавлено через 2 минуты Вы это лучше меня знаете. Я не понимаю, чем я вынуждаю Вас с этим вот спорить.
0
|
||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 21.09.2015, 19:22 | |||||||
|
вместо этого я прям у вас на глазах написал код, который реализует "рекурсивный указатель на функцию". мой пример-иллюстрация (см #31) иллюстрирует весь ваш псевдокод. собственно, вот это главное, чего вы хотите получить:
0
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||||||||||
| 21.09.2015, 19:51 [ТС] | |||||||||||
|
Я не понимаю этого кода, но вижу, что он вообще не похож на показанный псевдокод.
Я сейчас не доказываю, что это не то или что это то. Я не вижу того, что я ожидал. Вопрос не в рекурсивном указателе на функцию. А в функции, вовнутрь которой приходит указатель, который уже показывает на адрес функции, в которую он пришел. Вовнутрь функции должен передаваться указатель. При этом в разные моменты времени, в зависимости от того, на какую функцию указывает указатель, разыменование указателя приводит к вызову функции, в которую как параметр приходит адрес на начало самой себя. Т.е. если внутри функции просто разыменовывать пришедший в нее указатель, то должна происходить рекурсия. Вот как-то так вот витиевато все. Это не мое самолюбие. Я правда не вижу этого у Вас в коде. Добавлено через 7 минут
0
|
|||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||||||||||||||||||||
| 21.09.2015, 20:02 | |||||||||||||||||||||||||
|
вы ж понимаете, что делает операция взятия адреса? результатом такой операции является указатель, который хранит адрес объекта. смотрите:
тогда вот, пожалуйста:
даже самый обычный указатель на функцию не нужно разыменовывать, что выполнить запуск функции по указателю. поэтому, я не стал делать ненужную операцию обязательного разыменовывания перед запуском. тем менее вы не можете не увидеть, что в функцию foo передается адрес функции foo. и что сама функция foo запускает сама себя дергая себя через рекурсивный указатель. кроме того, просто рассуждайте логически: как компилятор мог догадаться, что нужно вызывать именно foo? он же не с потолка это взял. он знает, что нужно рекурсивно запускать функцию foo, потому что я скормил ей указатель на саму себя. можно было бы скормить что нибудь другое. но тогда и вызвалось бы тоже что-то другое. и не было бы рекурсии. Добавлено через 3 минуты технически это конечно можно. но так не делают. вот вам простейший встречный вопрос: предположим, нужно вызвать функцию с параметрами. пускай там будет два инта. и как вы эти параметры передадите? результат операции разыменовывания должен дать ссылку на объект, а не выполнять запуски функций. что бы выполнить запуск функций, должна быть возможность указать аргументы, с которыми нужно позвать функцию:
это уже вопросы дизайна. этакая косметика. сделать то можно по всякому.
1
|
|||||||||||||||||||||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
||
| 21.09.2015, 20:18 [ТС] | ||
|
глупый вопрос.
если pFunc это указатель Добавлено через 2 минуты Не по теме: я не буду делать акцент на разыменовании для вызова. Это больше было написано как для "импульса к действию", а не действительная потребность.
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 21.09.2015, 20:32 | |||
|
ещё он не умеет делать инкремент, или сравнение. он вообще ничего не умеет, кроме того, что вы озвучили в первоначальной задаче. однако с позиции своих знаний, я заявляю: что все операции, присущие сырым указателям на функцию, либо указателям на функцию-член - реализуются. причем закодить это не сложно. но нужно чутка понимать шаблоны и type erasure.
0
|
|||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|
| 21.09.2015, 20:40 [ТС] | |
|
А с каких пор в указатели можно закладывать возможности?
Указатели, о которых говор я - встроенный тип данных, такой же тип как, например int. Насколько мне известно, в такие типы свои возможности заложить невозможно.
0
|
|
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 21.09.2015, 20:55 | |||||||
|
я предоставил вам решение, которое позволяет это сделать. реально, рекурсивный вызов происходит по самому обычному (встроенному) указателю на функцию. по другому просто не возможно. компилятор жеж не телепат. но возможным это становится благодаря некой обертке:
что бы обмануть "вечную рекурсию". и это - красноречивый пример идеалогии языка с++ в действии: способность расширять свои возможности за счет кода, написанного на нем самом.
1
|
|||||||
|
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,886
|
|||
| 21.09.2015, 21:15 [ТС] | |||
|
Всё, что в class мне неизвестно, следовательно непонятно в принципе.
typedef - фиг с ним, синоним. в mCaller что-то записывается, только что непонятно. Также непонятно что символизирует название mCaller. Что-то типа "Кнопка спуска"?
0
|
|||
| 21.09.2015, 21:15 | |
|
Перемножить матрицу на саму себя
Форма HTML по методу GET должна открывать саму себя, но не может Функция должна принимать указатель на неизвестный класс? Ссылка с ключами на саму себя Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 30. Фосфорный и азотный замки по "честному" закону лимитирования Либиха
anaschu 16.07.2026
Основные достижения за последние дни
1. Механизм отложенного высвобождения фосфора
Добавлен специальный пул для медленного разложения меланизированных гиф ЕСМ
Реализована разная скорость. . .
|
Запрет пометки на удаление и отмены проведения
Maks 16.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "ПутевойЛист" разработанного в КА2.
Задача: запретить помечать на удаление и отменять проведения путевого листа при условии, если он сдан. . .
|
Как надо было делать правильно - вообще не слушать ИИ, его дело - текст.
Hrethgir 15.07.2026
А вообще надо было делать не так, чтобы не исправлять ошибку https:/ / www. cyberforum. ru/ blogs/ 223907/ 10996. html , правильно было : удалил кнопку, а потом добавил её.
Всё это стресс конечно. Почему?. . .
|
Знаете, от чего появляется стресс?
kumehtar 15.07.2026
Стресс появляется оттого, что вы, зная как поступить правильно, делаете наоборот.
Ларри Уингет
|
|
Нас бьют, а мы крепчаем? Какая чушь!
kumehtar 15.07.2026
Вот это вот бытующее мнение, что человек меняется только под действием проблем, всегда считал вредоносным. Поверь, от проблем у людей появляются не изменения, а нервное расстройство и ПТСР. А. . .
|
сукцессия 29. Переход от одних деревьев на другие делать более или менее вероятностным?
anaschu 12.07.2026
Насколько смена типов микоризы — исключительное событие в двухвековой сукцессии? Оценка вероятности в пространстве параметров
В текущей версии модели успешно реализован ключевой механизм. . .
|
сукцессия 27. Думаю, как переделывать уже написанную статью с планами на сукцессию.
anaschu 12.07.2026
Анализ соответствия модели требованиям
Реализованные компоненты:
Механизм закисления почвы через протонную помпу
Конкуренция между типами микориз
pH как триггер сукцессии
C/ P соотношение. . .
|
Сукцессия 26. Мат модель создана.
anaschu 12.07.2026
Модель смены растительных сукцессий посредством управления грибами работает внутри небольшой ячейки почвы, восстанавливающейся после пожара, где ненадолго бывшее царство хвойных снова захватили. . .
|