Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.67/15: Рейтинг темы: голосов - 15, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 21.12.2010
Сообщений: 17

Факториалы...

22.12.2010, 12:59. Показов 3591. Ответов 28
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Приветствую. Если напишу, что нужна помощь в решении задачи - сурово вас обману. Помощь не нужна - нужно решение. Язык - Си, среда Dev-C++

Написать функцию для вычисления значения
Название: LySmkmlb.png
Просмотров: 79

Размер: 3.1 Кб

Вычислить с ее помощью значения S(n) для n от 12 до 24 с шагом 4

Добавлено через 21 час 8 минут
Благодаря NNN777 есть такой вариант, но ответ выврдится совсем невнятно

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <cmath>
#include <conio.h>
 
long int factorial (long int numb);
 
using namespace std;
 
int main()
{
        int i;
        long int z, k;
        long double S;
        
        for (i=12; i<=24; i+=4)
        {
                z=factorial (2*i);
                k=factorial (24+i);
                S=double(z)/double(k);
                cout<<"S(n)= "<<S<<" "; 
        }
        cout<<endl;
        getch();
        return 0;
}
long int factorial (long int numb)
{
        if (numb<=1)
                return 1;
        else
                return numb * factorial(numb-1);
}


 Комментарий модератора 
Прикрепляйте картинки к сообщениям.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.12.2010, 12:59
Ответы с готовыми решениями:

Факториалы
Добрый день , не могу понять почему не работает программа . Вроде все сделал корректно , и результат показывает , только значения Y(x) и...

Факториалы
http://acm.timus.ru/problem.aspx?space=1&amp;num=1083 помогите решить эту задачу у меня мысль есть, но похоже неправильная. ...

Факториалы!
В лабе нужно вычислить выражение, в котором находятся числа с факториалами в таком порядке: 1!+2!+...+К!, я не знаю как это описать в...

28
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
24.12.2010, 22:31
Студворк — интернет-сервис помощи студентам
Я смотрю, меня здесь уже цитируют вовсю. Ну да ладно...

Цитата Сообщение от Nameless One Посмотреть сообщение
Цитата Сообщение от Напильнег
Nameless One, опять будешь утверждать, что твой код эффективнее и понятнее?
Насчет эффективнее - нет. А вот насчет понятнее, то да, так как все ключевые операции выделены в соответствующие функции с "говорящими" именами.
Т.е. ты хочешь сказать, что если громоздкие излишние рассуждения, упрощающие (упрощающие ли вообще?) только часть задачи, обвести в рамочку, оно менее ахинеистично будет? Ты, походу, так и не понял, что я сделал. Ладно поясним, хотя это уже детский сад.

Я воспользовался очевиднейшим соотношением

(2i)!/(n+i)! = 1/(2i+1)/(2i+2)/.../(n+i-1)/(n+i)

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

Цитата Сообщение от Nameless One Посмотреть сообщение
Кстати, продолжая нашу дискуссию из темы про рекурсию и пользуясь твоими доводами, я могу сказать, что твое решение неправильное и в качестве объяснения отослать перечитывать постановку задачи.
Попал пальцем в небо - там требовалось написать самодостаточную функцию, которая <бла-бла-бла...>, грубо говоря с жестко заданным интерфейсом, и решения, требующие для себя другого интерфейса, нельзя было считать правильными. Тут затыка в алгоритме вычислений, я его сделал в простейшей обертке, только чтоб суть алгоритма вычислений показать - я вообще не ставлю перед собой задачи сделать шкубенту задачу по ключ. У тебя же бредовейший алгоритм, само направление мысли какое-то не в ту сторону, как его не оборачивай.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
24.12.2010, 23:11
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Напильнег, зачем новое слагаемое искать так сложно?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  double sn, sni;
  int n, i, j;
 
  for (n=12; n<=24; n+=4) {
    for ( sni=1./(2*n-1), sn=1.+1./(2*n-1), i=2*n-1; i>n+1; i--) {
                sni*=i;
      for (j=2*i-2*n-1; j<=2*i-2*n; j++) 
             sni/=j;
      sn+=sni;
    }
    printf("S[%2d]=%.6f\n", n, sn);
  }
    
  system("pause");
    
  return(0);
}
"и никаких сусликов".
Если ЭТО называется "просто", то мы наверное русский язык в сильно разных бурсах учили О_о

Вот тебе реальне простое "хвостовое" решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  double sn, sni;
  int n, i;
 
  for (n=12; n<=24; n+=4) {
    for ( sni=1.0, sn=1.0, i=n-1; i>=1; i--) {
      sni=sni/(2*i+1)/(2*i+2)*(n+i+1);
      sn+=sni;
    }
    printf("S[%2d]=%.6f\n", n, sn);
  }
    
  system("pause");
    
  return(0);
}
- как видно, тут внутреннего цикла вообще нет, Sni вычисляются по рекурентным образом.

Но на самом деле в данном случае так (с хвоста) делать не надо. Вот эффективное и со всех сторон корректное решение:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <stdlib.h>
 
int main()
{
  double sn, sni;
  int n, i, j;
 
  for (n=12; n<=24; n+=4) {
    for (sni=1, j=3; j<=n+1; j++) sni/=j;
    for (sn=sni, i=2; i<=n; i++) {
      sni=sni*(2*i-1)*(2*i)/(n+i);
      sn+=sni;
    }
    printf("S[%2d]=%.6f\n", n, sn);
  }
    
  system("pause");
    
  return(0);
}
Изображения
 
1
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2010, 07:25
Цитата Сообщение от Напильнег Посмотреть сообщение
Если ЭТО называется "просто", то мы наверное русский язык в сильно разных бурсах учили
Наверное все-таки просто, раз следующие Ваши два кода теперь вычисляют очередное слагаемое не путем деления 1 на кучу делителей, а путем 2 умножений и одним делением (или путем 2 делений и 1 умножением) предыдущего слагаемого.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
25.12.2010, 11:54
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Наверное все-таки просто, раз следующие Ваши два кода теперь вычисляют очередное слагаемое не путем деления 1 на кучу делителей, а путем 2 умножений и одним делением (или путем 2 делений и 1 умножением) предыдущего слагаемого.
Я таким образом убиваю внутренний цикл и избегаю повторных вычислений, а ты что добился усложнением выражений и рассогласованием индексации цикла и нумерации слагаемых? Цикл на месте, выражения стали - "без стакана не разберешься"...

Ладно, ты хоть понял, почему з хвоста считать нежелательно? (конституцией РФ не запрещено, но таки нежелательно)
0
Эксперт С++
 Аватар для valeriikozlov
4728 / 2549 / 757
Регистрация: 18.08.2009
Сообщений: 4,568
25.12.2010, 12:14
Цитата Сообщение от Напильнег Посмотреть сообщение
Я таким образом убиваю внутренний цикл и избегаю повторных вычислений
Правильнее будет так:
Я понял, благодаря Вам, что находить каждое слагаемое путем деления 1 на кучу делителей, менее эффективно, чем находить очередное слагаемое из значения соседнего слагаемого.
Цитата Сообщение от Напильнег Посмотреть сообщение
почему з хвоста считать нежелательно?

Цитата Сообщение от Напильнег Посмотреть сообщение
for (sni=1, j=3; j<=n+1; j++) sni/=j;// конечно "з хвоста" нежелательно. Кол-во операций деления в целом ведь не увеличивается (именно за счет этой строки).
for (sn=sni, i=2; i<=n; i++) {
sni=sni*(2*i-1)*(2*i)/(n+i);
sn+=sni;
Жалко нет зевающего смайлика. В общем придумаете, какой-нибудь более простой алгоритм (а не вариацию моего) - тогда отвечу. А так спор заканчиваю, скучно.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
25.12.2010, 15:18
Цитата Сообщение от valeriikozlov Посмотреть сообщение
Правильнее будет так:
Я понял, благодаря Вам, что находить каждое слагаемое путем деления 1 на кучу делителей, менее эффективно, чем находить очередное слагаемое из значения соседнего слагаемого.
А-а-а! Дошло наконец - Ваше
C++
1
for (j=2*i-2*n-1; j<=2*i-2*n; j++) sni/=j;
это, то что я записал как
C++
1
/(2*i+1)/(2*i+2)
, сохранив соответствие кода естественной записи выражений для слагаемых.

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

А предъявил сначала другое решение потому, что цель была пнуть <как его там>, а он рекурентное решение просто бы не понял, он и простейшее очевиднейшее то, как видно, не понял без дополнительных разъяснений. Когда нарисовался противник посерьезнее, ударил козырем.

Если терзают сомнения, посмотри историю моих сообщений - я на последней неделе в аналогичной задаче разъяснял, что такие задачи надо делать через рекурентное соотношение, когда все, в том числе и Вы, херней какой-то маялись. Так что это еще вопрос, кто у кого чего содрал.

Цитата Сообщение от valeriikozlov Посмотреть сообщение
for (sni=1, j=3; j<=n+1; j++) sni/=j;// конечно "з хвоста" нежелательно. Кол-во операций деления в целом ведь не увеличивается (именно за счет этой строки).
Ответ не верен, пилите дальше.

Цитата Сообщение от valeriikozlov Посмотреть сообщение
Жалко нет зевающего смайлика.
Зевать Вам рано - я простых вопросов не предлагаю, и этот вопрос касается весьма важного аспекта практических вычислений. Так что рекомендую отнестись к тому, что я говорю, повнимательнее.
0
Эксперт С++
5058 / 3118 / 271
Регистрация: 11.11.2009
Сообщений: 7,044
25.12.2010, 15:24
Напильнег, слушайте, все мы, обитатели форума, простые зеваки, давно поняли, что вы, ваше вундеркиндство, Гаусс, Эйлер, Даламбер и просто хороший человек в одном лице. Но вы так этим на каждом углу кичитесь, что, право, батенька, становится мерзко.
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
25.12.2010, 15:59
Цитата Сообщение от silent_1991 Посмотреть сообщение
все мы, обитатели форума, простые зеваки, давно поняли,
Не все...
0
481 / 119 / 17
Регистрация: 30.09.2010
Сообщений: 473
26.12.2010, 20:57
silent_1991, вопрос на засыпку - чем жизнь от напильника отличается?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2010, 20:57

Факториалы числа
Дано число N. Рассчитать и вывести первые N факториалов. (1!, 2! ... N!) Задача-то лёгкая, но есть одна загвоздка: переменная цикла и...

Большие факториалы
Помогите написать программу,котороя щитает большые фактуриалы(100!,200! и тд)

Рекурсия: вывести факториалы от 1 до 10
Нужно рекурсивно вывести все факториалы от 1-го до 10

Вычисление по формуле. Факториалы
Не знаю как это решить, помогите плиз Напишите программу вычисления примера y = a! + b! / a! - b! с помощью функции расчета х! = 1 *...

пожалуйста факториалы. Заранее спасибо)
1+x^2/2!+x^4/4!+...+x^2n/2n!+...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
29
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу (вариант №3)
Maks 15.11.2026
Обновленная версия предыдущей обработки. Изменения коснулись букв: Ъ, Ы, Ь, Э, отображения которых зависят от положения реквизита "Транслитерация имён". Изменено отображение буквы Й. Добавлена. . .
Транслитерация текста с кириллицы на латиницу (вариант №2)
Maks 13.11.2026
Обновленная версия ранее созданной обработки. Добавлено: - Проверка исходного текста на кириллицу, через обращение к стандартной функции "ТолькоКириллицаВСтроке" из общего модуля. . .
Часы с термометром и праздничным календарем
yariko 12.11.2026
Сегодня мы рассмотрим как можно сделать отличные многофункциональные часы. Итак, поставим конкретную задачу: разработать часы с календарем, двумя термодатчиками, выводом поздравительных сообщений. . .
Транслитерация текста с кириллицы на латиницу (вариант №1)
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru