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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как посчитать переменную в зависимости от формулы? 
:(
    Опции темы
AntonTatu
Дата 12.9.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Всем привет !

Можно ли такое сделать (общая схема), если можно то как ?:


Имеется массив Mas, в котором записаны формулы в текстовом (строковом) виде:
Mas[0] = "j+2 ";
Mas[1] = "j*j+2 ";
Mas[2] = "j+8 ";
Mas[3] = "j*j*2+1 ";

Имеется массив Otvet типа int и int j = 2 ;

Нужно сделать вот такую штуку:

    for(int i = 0; i < 4; i++)
        {
         Otvet[i] = Mas[i]
        }

т.е. необходимо перед вычислением Otvet[i] подставить в место Mas[i] соответствующую строчку и только потом вычислить Otvet[i], т.е. программа должна "понимать" что при :
i = 0 будет считаться Otvet[0] = j+2;
i = 1 будет считаться Otvet[1] = j*j+2;
i = 2 будет считаться Otvet[2] = j+8;
i = 3 будет считаться Otvet[3] = j*j*2+1;

КААК такое можно сделать ?


PM MAIL   Вверх
mrbrooks
Дата 12.9.2008, 10:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



ответ - перегрузка функций либо шаблоны функций.

Добавлено через 54 секунды
switch
PM MAIL   Вверх
W4FhLF
Дата 12.9.2008, 11:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



Если нужно для конечного небольшого числа вариантов такие формулы, то самое простое решение в массиве Mas хранить указатели на функции, которые вычисляют эти выражения:

Код

int f1(int j)
{
  return j + 2;
}

int f2(int j)
{
 return j * j + 2;
}

main()
{
  int (*pFun[2])(int);
  int answer[2];

  int j = 2;
  
  pFun[0] = f1;
  pFun[1] = f2;

   for(int i = 0; i < 2; i++)
        {
         answer[i] = pFun[i](j);
        }
}


Если же набор выражений должен задаваться пользователем, то нужно писать свой парсер, либо использовать уже готовый. Например из скриптового языка Lua, статьи по которому есть на нашем форуме. 

 


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
AntonTatu
Дата 12.9.2008, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(W4FhLF @ 12.9.2008,  11:00)
Если нужно для конечного небольшого числа вариантов такие формулы, то самое простое решение в массиве Mas хранить указатели на функции, которые вычисляют эти выражения:

Проблема в том что этих функций может быть от 0 до к примеру 2000 а то и до 200000.
1. Почему описанный способ подойдет только для "конечного небольшого числа вариантов"?

Поможет ли такое решение:
Функции вычисляются в другой программе и кладутся в файл file.cpp.
В результате файл будет содержать какоето расчитанное колличество этих функций (предположим 100)

Потом этот файл компилируется в dll и функции используются в основной программе ?

2. Сколько (по времени) занимает операция вызова функции из dll ?


Спасибо за ответ !!!
PM MAIL   Вверх
W4FhLF
Дата 12.9.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


found myself
****


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

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



1. Потому что в ином случае писать кучу таких маленьких функций нерационально.

2. На уровне машкода столько же, сколько и вызов обычной функции


--------------------
"Бог умер" © Ницше
"Ницше умер" © Бог
PM ICQ   Вверх
Mayk
Дата 12.9.2008, 11:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


^аВаТаР^ сообщение>>
****


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

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



Цитата(AntonTatu @  12.9.2008,  15:22 Найти цитируемый пост)

2. Сколько (по времени) занимает операция вызова функции из dll ?
 
считай за 0 ибо
Цитата(AntonTatu @  12.9.2008,  15:22 Найти цитируемый пост)

1. Почему описанный способ подойдет только для "конечного небольшого числа вариантов"?

Поможет ли такое решение:
Функции вычисляются в другой программе и кладутся в файл file.cpp.
В результате файл будет содержать какоето расчитанное колличество этих функций (предположим 100)

Потом этот файл компилируется в dll и функции используются в основной программе ?

всё время будет уходить вот сюда. вызвать сторонний процесс, который создаёт dll, подгрузить dll и заюзать её гораздо дольше чем использовать eval из всяких lua/python'ов/парсеров


--------------------
 Здесь был кролик. Но его убили.
Человеки < кроликов, йа считаю.
PM MAIL WWW ICQ   Вверх
Lazin
Дата 12.9.2008, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

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



возможно если ты нормально опишешь зачем это нужно, мы сможем подсказать лучшее решение... smile 
PM MAIL Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

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


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

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


 




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


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

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