Решить задачу на C++

Ответить
StarWorm
Сообщения: 24
Зарегистрирован: 18 ноя 2008, 10:28

12 янв 2009, 02:05

StarWorm Во-первых, может не хватить стека для выполнения функции fact. Во-вторых, существует целый раздел для приближенных вычислений в математике. И pos++ - это преждевременная пессимизация.
Ну если боишься переполнения, то пиши fact итерационным методом, а не рекурсивным...
pos++ все правильно ИМХО!
Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

12 янв 2009, 12:44

pos++ все правильно ИМХО!
Это преждевременная песимизация. Нужно писать ++pos. В отличии реализаций этих операторов и кроется истина.
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

12 янв 2009, 17:19

Здесь рекурсия беды большой не принесёт, так как переменная вряд ли выйдет за пределы 10. Хотя, на первый взгляд, я тоже подумал, что дважды вычислять факториал - это слишком.
StarWorm
Сообщения: 24
Зарегистрирован: 18 ноя 2008, 10:28

13 янв 2009, 16:28

Это преждевременная песимизация. Нужно писать ++pos. В отличии реализаций этих операторов и кроется истина.
Как я знаю, отличие var++ от ++var заключается в том, что в первом случае сначало происходит действие с переменной, а потом она инкрементируется... А во втором случае происходит сначала инкремент, а потом действие с переменной!

Код: Выделить всё

int var = 0;
int var1 = var++;    //var1 = 0   и   var = 1
int var2 = ++var;    //var2 = 2   и   var = 2
Albor, а какое решение можешь предложить ты???
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

13 янв 2009, 17:46

Я, как раз, поддерживаю твоё решение, так как это проще и данную задачу решает полностью. Просто, я имел ввиду моё первое впечатление и на ум сразу пришла идея сохранять результат факториала в таблице или просто сохранять результат от предыдущего вычисления, чтобы дважды не вычислять одно и тоже на определённом промежутке, но так как переменная ограничивается значением первой десятки, то ничего "криминального" в приведенном коде нет. Я двумя руками за! :)
Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

14 янв 2009, 11:35

StarWorm писал(а):Как я знаю, отличие var++ от ++var заключается в том, что в первом случае сначало происходит действие с переменной, а потом она инкрементируется... А во втором случае происходит сначала инкремент, а потом действие с переменной!

А ты напиши реализацию этих двух операторов и всё сразу станет ясно.
olleg90
Сообщения: 1
Зарегистрирован: 16 янв 2009, 13:10

16 янв 2009, 13:28

Помогите пожалуйста решить задачу!
Надо отсортировать одномерный массив методом древа.
л.ю.д.а.
Сообщения: 2
Зарегистрирован: 16 янв 2009, 21:35

16 янв 2009, 23:04

Буду очень благодарна если ктото сможет мне помочь решить генетическую задачу.
Функция
void palindrome (char DNA[ ], int& start, int& end)
получает цепочку символов\букв возвращает индех начала и
конца полиндрома BY REFERENCE. Длина полиндрома может быть четнои или не четнои.
пример:

DNA = ATCATCCCAAAGGGЕCCCTTTGGGAAGCCA

начало равно 3 конец 23
маленкое пояснение полиндром это когда от среднеи точки по обе стороны стоят соответствующие нуклеотиди т.е. напротив C стоит G или наоборот, также напротив A стоит T или наоборот(напротив Т стоит А).
Е обозначает центральное Т которое разделяет между двумя циклами.С права и с лева должно быть одинаковое кол-во соответствующих нуклеотидов(начало равно 3 конец 23).
Постаралась как можно точнее виразить свои мысли т.к.это перевод.
Буду рада любои помощи.
Albor
Сообщения: 482
Зарегистрирован: 06 сен 2004, 13:34
Откуда: Днепропетровск

18 янв 2009, 08:58

StarWorm писал(а): Albor, а какое решение можешь предложить ты???

StarWorm, как тебе такой вариант функции?

Код: Выделить всё

double fact(unsigned num)
{
static vector<double> v;
int cnt=v.size();
if(cnt==0) v.push_back(++cnt);
while(cnt<=num)
v.push_back(v[cnt-1]* ++cnt);
return v[num-1];
}
Здесь, если функция вызывается с бОльшим аргументом чем предыдущие, то происходит только довычисление, а если с меньшим, то просто возвращается результат. При многократном использовании функции, наверное, это полезно.
Аватара пользователя
Airhand
Сообщения: 234
Зарегистрирован: 06 окт 2005, 16:21
Откуда: Dnepropetrovsk

18 янв 2009, 16:41

Albor писал(а):v.push_back(v[cnt-1]* ++cnt);

Уже неверно. Что раньше выполнится v[cnt-1] или ++cnt ? Зависит от реализации.
Ответить