Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2011, 23:44   #1
appalist
 
Регистрация: 22.12.2011
Сообщений: 3
По умолчанию Задача для знатоков

дан ряд из 1000 (условно) членов, значения 0 или 1
можно ли сделать такую программку (ее действия):
y=sin (sin(x)), 0<x<1000 (целые значения), если у>0 то z=1, иначе z=0. Почленное сравнение с исходным рядом - если полное совпадение, то ответ найден, иначе создание нового алгоритма
у=sin (sin(x)+sin(x^2))
y=sin (sin(x)+sin(x^2)+sin(x^3))
...
y=sin (sin(x)+sin(x^2)+sin(x^3)+...+sin(x ^100))

Т.е. сложность заключается в дописывании в формулу нового элемента sin(x^a), в текстовом режиме дописать можно без проблем, но как тогда объяснить машине что текст - это алгоритм действий? Возможно ли создание программы, которая будет изменять свою внутреннюю часть или менять сторонний алгоритм выстраивания двузначного ряда, это и есть вопрос уважаемые знатоки!!!)
appalist вне форума Ответить с цитированием
Старый 23.12.2011, 00:36   #2
appalist
 
Регистрация: 22.12.2011
Сообщений: 3
По умолчанию добавлю

не обращайте внимание на саму формулу, она не соответствует решаемой задаче, лишь простой пример, здесь главное - возможно ли создание алгоритма изменяющего другой алгоритм..
appalist вне форума Ответить с цитированием
Старый 23.12.2011, 01:17   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Код:
double SinFunc(double x, int p) { return sin ( pow(x,p) );

double GeneralFunc(double x, int n) {   double res=0;      for(uint i=1;i<=n;++i)  {   res += SinFunc(x,i); }  };


if(почленное_сравнение==истина) тогда { GeneralFunc(x,1);  } 
иначе { GeneralFunc(x,какое_то_число);  }
_Bers вне форума Ответить с цитированием
Старый 23.12.2011, 01:21   #4
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

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

С++ позволяет более элегантно и проще реализовывать "эффект рефлексии" - паттерны "стратегия", функторы, указатели на функции.


Грубо говоря, если условие равно 1 - запустить вот эту функцию.
Если условие равно 2 - запустить вот эту функцию.

Или - запустить функцию, адрес которой хранится в массиве под индексом, являющимся результатом какого либо выражения.

и тд, и тп.

Задачу заявленную в сабже можно решить времени компиляции (то есть, результат вычислений будит известен ещё до начала запуска программы)

Последний раз редактировалось _Bers; 23.12.2011 в 01:27.
_Bers вне форума Ответить с цитированием
Старый 23.12.2011, 23:16   #5
appalist
 
Регистрация: 22.12.2011
Сообщений: 3
По умолчанию

скорее всего это рефлексия, важен принцип именно программного построения нового алгоритма, по которому строится новый ряд и сравнивается с исходным
(т.к. исходный ряд может состоять из триллиона членов, предполагается принципиально не отличный, но более сложный подход в формировании нового алгоритма)
appalist вне форума Ответить с цитированием
Старый 23.12.2011, 23:19   #6
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Известно, что не существует задач, которых нельзя было бы решить без рефлексии.
Однако, если так сильно хочется порефлексировать - есть смысл смотреть в сторону других языком программирования. Например - си шарп какой нибудь.

Либо, в сторону специализированных библиотек, которые предоставляют подобные услуги (я сам таких не ведаю, ибо мне ни разу ещё подобное не надобилось)
_Bers вне форума Ответить с цитированием
Старый 24.12.2011, 00:32   #7
Сtrl
C++
Форумчанин
 
Аватар для Сtrl
 
Регистрация: 27.03.2011
Сообщений: 803
По умолчанию

Если я правильно понял задачу, то список (list) из полиморфных функторов поможет решить проблему. Можем обсудить через Skype.
Ищете информацию по C++?
cplusplus.com
Сtrl вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача для C++ Елжан Помощь студентам 2 12.11.2011 12:10
Пустяк для знатоков ассемблера a.lebedev Помощь студентам 0 30.05.2010 22:33
Три вопрoca на засыпку для знатоков Си ds.Dante Общие вопросы C/C++ 8 25.01.2010 16:06
Нужна помощь от знатоков excel :) VaDDok Microsoft Office Excel 7 19.03.2009 19:38