Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 10.10.2020
Сообщений: 6

Вычислить сумму факториалов четных чисел от M до N

27.10.2020, 20:54. Показов 927. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Разработать алгоритм с подпрограммой вычисления суммы факториалов всех четных чисел от M до N
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.10.2020, 20:54
Ответы с готовыми решениями:

Вычислить сумму факториалов чисел от 1-10
Подпрограмма Вычислить сумму факториалов чисел от 1-10

Вычислить сумму факториалов всех четных чисел в интервале от m до n
Вычислить сумму факториалов всех четных чисел в интервале от m до n На Си (функции и процедуры)

Найти сумму факториалов четных чисел натурального ряда длинной N
Program FactorilX; {$APPTYPE CONSOLE} var r,n:integer; s:real; function f(a:double):double; begin if a=0 then f:=1 ...

8
 Аватар для Вадим Тукаев
310 / 291 / 116
Регистрация: 23.01.2018
Сообщений: 933
08.11.2020, 22:01
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
var m, n, f, s, i: longint;
 
begin
    readln(m, n);
    f := 1;
    s := 0;
    for i := 2 to n do begin
        f *= i;
        if (i >= m) and (i mod 2 = 0) then begin
            s += f;
        end;
    end;
    writeln(s);
end.
0
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
09.11.2020, 07:01
Вадим Тукаев, всё красиво, но если m=1, то неправильно!
1
 Аватар для Вадим Тукаев
310 / 291 / 116
Регистрация: 23.01.2018
Сообщений: 933
09.11.2020, 08:21
Почему же? Проверил на вводе 1 5 - всё посчитало правильно. Ответ 26, сумма факториалов чисел 2 и 4. Но вот если M = 0, тогда действительно считает неправильно, потому что 0! = 1. Исправить это легко, но я на свежую голову сделал лучше.

Pascal
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
33
34
35
36
37
38
type Num = longint;
 
type Fac = record
    f: Num;
    i: Num;
end;
 
type PFac = ^Fac;
 
procedure Fac_init(self: PFac);
begin
    self^.f := 1;
    self^.i := 0;
end;
 
function Fac_get(self: PFac; n: Num): Num;
begin
    while self^.i < n do begin
        inc(self^.i);
        self^.f *= self^.i;
    end;
    Fac_get := self^.f;
end;
 
var m, n, s: Num;
var f: Fac;
 
begin
    readln(m, n);
    s := 0;
    Fac_init(addr(f));
    m := ((m + 1) shr 1) shl 1;
    while m <= n do begin
        s += Fac_get(addr(f), m);
        m += 2;
    end;
    writeln(s);
end.
1
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,059
09.11.2020, 09:22
Сорри! Затупил…
У ТС сказано, что только чётных.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
09.11.2020, 21:00
Цитата Сообщение от Вадим Тукаев Посмотреть сообщение
Pascal
7
8
9
10
11
12
    for i := 2 to n do begin
        f *= i;
        if (i >= m) and (i mod 2 = 0) then begin
            s += f;
        end;
    end;
Лишнее условие легко выкинуть из цикла
Pascal
7
8
9
10
11
    for i := 2 to m-1 do f *= i;
    for i := m to n and not 1 do begin
        f *= i;
        if not Odd(i) then s += f;
    end;
Добавлено через 9 минут
Цитата Сообщение от Вадим Тукаев Посмотреть сообщение
Кликните здесь для просмотра всего текста
Pascal
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
type Num = longint;
type Fac = record
    f: Num;
    i: Num;
end;
type PFac = ^Fac;
procedure Fac_init(self: PFac);
begin
    self^.f := 1;
    self^.i := 0;
end;
function Fac_get(self: PFac; n: Num): Num;
begin
    while self^.i < n do begin
        inc(self^.i);
        self^.f *= self^.i;
    end;
    Fac_get := self^.f;
end;
var m, n, s: Num;
var f: Fac;
begin
    readln(m, n);
    s := 0;
    Fac_init(addr(f));
    m := ((m + 1) shr 1) shl 1;
    while m <= n do begin
        s += Fac_get(addr(f), m);
        m += 2;
    end;
    writeln(s);
end.
Если наступить на горло внутреннему программисту на Си, то на Паскале синтаксически чище это выглядит так:
Pascal
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
33
34
35
36
type
  Num = longint;
  PFac = ^Fac;
  Fac = record
    f: Num;
    i: Num;
  end;
 
procedure Fac_init(var self: Fac);
begin with self do begin
    f := 1;
    i := 0;
end end;
 
function Fac_get(var self: Fac; n: Num): Num;
begin with self do begin
    while i < n do begin
        inc(i);
        f *= i;
    end;
    Fac_get := f;
end;
var
  m, n, s: Num;
  f: Fac;
begin
    readln(m, n);
    s := 0;
    Fac_init(f);
    m := (m + 1) and not 1;
    while m <= n do begin
        s += Fac_get(f, m);
        m += 2;
    end;
    writeln(s);
end.
Добавлено через 26 минут
Ленивый факториал для возрастающего аргумента для этой задачи можно написать так:
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function fact(n: Integer): Longint;
const
  LastN: Integer = 0;
  LastF: LongInt = 1;
begin
  if n < LastN then begin
    LastN := 0;
    LastF := 1;
  end;
  while LastN < n do begin
    Inc(LastN);
    LastF := LastF * LastN;
  end;
  fact := LastF;
end;
Тогда сама задачка решается весьма просто:
Pascal
16
17
18
19
20
21
22
23
24
25
26
27
28
var
  m, n: Integer;
  s: LongInt;
begin
  ReadLn(m, n);
  m := (m + 1) and not 1;
  n := n and not 1;
  while m <= n do begin
    s += fact(m);
    Inc(m, 2);
  end;
  WriteLn(s);
end.
0
 Аватар для Вадим Тукаев
310 / 291 / 116
Регистрация: 23.01.2018
Сообщений: 933
09.11.2020, 21:44
Цитата Сообщение от bormant Посмотреть сообщение
Если наступить на горло внутреннему программисту на Си, то на Паскале синтаксически чище это выглядит так:
А если наступить на горло внутреннему программисту на Паскале, то на божественном APL это выглядит вообще великолепно:

Code
1
2
3
      M N←0 6
      ⎕←+/!(~2|A)/A←¯1+M+⍳1+N-M
747


И я уверен, что это ещё далеко не самый правильный и изящный способ. Я на самом деле полный ламер в этом языке пока что.
0
Модератор
Эксперт Pascal/DelphiЭксперт NIX
 Аватар для bormant
7816 / 4635 / 2837
Регистрация: 22.11.2013
Сообщений: 13,158
Записей в блоге: 1
09.11.2020, 22:36
С APL — это точно не ко мне
Но если про Паскали потрепаться — вэлкам.

Кстати, с тем, почему fact из #6 ленивый при вычислении возрастающих факториалов, вопроса не возникло?
(хинт: LastN, LastF — static).
0
 Аватар для Вадим Тукаев
310 / 291 / 116
Регистрация: 23.01.2018
Сообщений: 933
09.11.2020, 23:17
Цитата Сообщение от bormant Посмотреть сообщение
С APL — это точно не ко мне
Жаль. Поговорить о нём совершенно не с кем. Впрочем, если это божественный язык, то всё логично. Скука и одиночество - профессиональные заболевания богов.

Цитата Сообщение от bormant Посмотреть сообщение
Но если про Паскали потрепаться — вэлкам.
Честно говоря, не интересовался им со времён первого курса в институте. Просто иногда спрашивают задачку решить на нём. Самая большая проблема тут - отвыкнуть от знакомых методов решения. А то я сначала думаю, как бы я решил на Python, потом понимаю, что на Pascal нет 90% требующихся для этого конструкций, и начинаю придумывать, как бы их реализовать, как на C. В результате простая программа превращается в какой-нибудь двусвязный список списков.

Кстати, примерно такое же чувство беспомощности охватывает, когда не можешь решить на APL простейшую задачу, которую решил бы даже на Pascal или C. И даже на Lisp или Haskell, если вдруг приспичило бы. Но в этом языке почти никакие "наработки" из других языков не пригодятся, потому что там совсем другая логика. Даже конкатенативные языки рядом не валялись по степени вывернутости своей логики наизнанку. Я пробовал один такой язык - очень быстро втянулся.

Цитата Сообщение от bormant Посмотреть сообщение
Кстати, с тем, почему fact из #6 ленивый при вычислении возрастающих факториалов, вопроса не возникло?
(хинт: LastN, LastF — static).
Ага, что-то припоминаю про "константы, которые совсем не константы".
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
09.11.2020, 23:17
Помогаю со студенческими работами здесь

Вычислить сумму факториалов чисел
.Для данной составить задачи две программы: непосредственное функциональное описание и программу, основанную на «хвостовой» рекурсии....

Вычислить сумму факториалов нечетных чисел от 1 до n
1. Вычислить сумму факториалов нечетных чисел от 1 до n. Вычисление факториала оформить в функции. Видел много тем, как делать данное...

Вычислить сумму факториалов всех нечетных чисел от 1 до 9
вычислить сумму факториалов всех нечетных чисел от 1 до 9

Вычислить сумму факториалов всех нечетных чисел от 1 до 9
Можете ли вы переписать эту программу через procedure или function заранее спасибо Вычислить сумму факториалов всех нечетных чисел от...

Вычислить сумму факториалов всех нечетных чисел от 1 до 9
C++ for dos v.3.1. вычислить сумму факториалов всех нечетных чисел от 1 до 9 вот что у меня получилось (вернее на что меня хватило) ...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru