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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.11.2013, 21:09   #1
tweeker
Пользователь
 
Регистрация: 29.11.2013
Сообщений: 11
По умолчанию Составить программу для вычисления суммы: 2!+4!+6!+…+n!

Составить программу для вычисления суммы: 2!+4!+6!+…+n! с подпрограммой процедурой.Заранее спасибо.
P.S. нужно сделать очень все по-простому.Заранее спасибо
tweeker вне форума Ответить с цитированием
Старый 29.11.2013, 21:54   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
functin factorial(const n:integer):integer;
var
 i:integer;
begin
 result:=1;
  for i:=2 to n do
    result:=result*i;
end;
var
n,i,c:integer;
begin
readln(n);
c:=0;
for i:=2 to n do
c:=c+factorial(i);
writeln(c);
end.
Кольша вне форума Ответить с цитированием
Старый 29.11.2013, 22:12   #3
tweeker
Пользователь
 
Регистрация: 29.11.2013
Сообщений: 11
По умолчанию

functin factorial(const n:integer):integer;
var
i:integer;
begin
В этой части пишет "неизвестный идентификатор".нужно добавить в Var?
tweeker вне форума Ответить с цитированием
Старый 29.11.2013, 22:15   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Кстати, на данном этапе развития человечества, тип Integer это число от -2147483648 до 2147483647.
А факториал всего от 13 уже равен 13!=6227020800
Так что лучше Double, если конечно n не ограничено числом 12.
И лучше последующее слагаемое вычислять через предыдущее.
А то получается, вычисляем 5! : 1*2*3* и т.д, потом 6! - и снова 1*2*3 и т.д.

Цитата:
Сообщение от tweeker Посмотреть сообщение
f пишет "неизвестный идентификатор"
Наверное, не нравится Result.
Смотря, в чем вы работаете. Не все компиляторы понимают этот Result.
Некотрые нет. Вместо него надо имя функции.

Последний раз редактировалось Stilet; 30.11.2013 в 17:46.
type_Oleg вне форума Ответить с цитированием
Старый 29.11.2013, 22:20   #5
tweeker
Пользователь
 
Регистрация: 29.11.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Кстати, на данном этапе развития человечества, тип Integer это число от -2147483648 до 2147483647.
А факториал всего от 13 уже равен 13!=6227020800
Так что лучше Double, если конечно n не ограничено числом 12.
И лучше последующее слагаемое вычислять через предыдущее.
А то получается, вычисляем 5! : 1*2*3* и т.д, потом 6! - и снова 1*2*3 и т.д.
Да,это короче будет,но к сожалению,я еще не дошел до этого так что буду через integer

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Наверное, не нравится Result.
Смотря, в чем вы работаете. Не все компиляторы понимают этот Result.
Некотрые нет. Вместо него надо имя функции.
Тааак,а теперь для псевдопрограммиста объясни

Последний раз редактировалось Stilet; 30.11.2013 в 17:46.
tweeker вне форума Ответить с цитированием
Старый 29.11.2013, 22:23   #6
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
functin factorial(const n:integer):Double;
var
 i:integer;
begin
 result:=1;
  for i:=2 to n do
    factorial:=factorial*i;
end;
var
n,i,c:integer;
begin
readln(n);
c:=0;
for i:=2 to n do
c:=c+factorial(i);
writeln(c);
end.
Кольша вне форума Ответить с цитированием
Старый 29.11.2013, 22:27   #7
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Цитата:
Сообщение от tweeker Посмотреть сообщение
Тааак,а теперь для псевдопрограммиста объясни
Вместо
result:=1;
вот это
factorial:=1;

PS А вообще в задании подпрограммой процедурой, то есть надо не function, а procedure
Хотя, мне кажется, с функцией логичнее. Или как? Можно и то и то?

Кстати, на чем пишите? Я понял, что не Delphi, не Lazarus, а что ?

И еще, n может быть нечетным?

Последний раз редактировалось type_Oleg; 29.11.2013 в 22:35.
type_Oleg вне форума Ответить с цитированием
Старый 29.11.2013, 22:57   #8
tweeker
Пользователь
 
Регистрация: 29.11.2013
Сообщений: 11
По умолчанию

Цитата:
Сообщение от type_Oleg Посмотреть сообщение
Вместо
result:=1;
вот это
factorial:=1;

PS А вообще в задании подпрограммой процедурой, то есть надо не function, а procedure
Хотя, мне кажется, с функцией логичнее. Или как? Можно и то и то?

Кстати, на чем пишите? Я понял, что не Delphi, не Lazarus, а что ?

И еще, n может быть нечетным?
Мы еще только в самом начале-Turbo Pascal.Можно только функц.Я сделал с помощью цикла,без подпрограмм,меня заставили переделывать -_-
tweeker вне форума Ответить с цитированием
Старый 29.11.2013, 23:18   #9
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

n может быть нечетным?

Вот, и функция и процедура. Надеюсь, что ввод n, вывод результата, сами сможете.
Код:
function fact(n:Integer):Double;
begin
 if n=0 then fact:=1 else fact:=n*fact(n-1); // рекурсия однако, то есть самовызов функции
end;
procedure sumFact(n:Integer;var sum:Double);
var i:Integer;
begin
 sum:=0;
 if n<2 then Exit;
 for i:=2 to n do 
   if (not Odd(i))or(i=n)then sum:=sum+fact(i);
end;
Не оптимальный по быстродействию, но работает.

Последний раз редактировалось Stilet; 30.11.2013 в 17:49.
type_Oleg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Составить программу для вычисления суммы квадратов простых чисел, лежащих в интервале(M, N) kirito_17 Помощь студентам 3 20.11.2013 15:52
Составить программу вычисления двойной суммы(assembler) grongost Помощь студентам 1 26.02.2011 11:31
Составить программу вычисления суммы. Obender13 Помощь студентам 0 05.11.2009 18:14
Составить программу вычисления суммы Ленка Помощь студентам 8 28.05.2009 13:29