Форум программистов
 
О проблемах, например, с регистрацией пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail, а тут можно восстановить пароль.

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Ответ
 
Опции темы
Старый 25.10.2017, 11:16   #1
kris14
Пользователь
 
Регистрация: 25.10.2017
Сообщений: 29
По умолчанию Помогите, пожалуйста, найти ошибку в коде (найти сумму факториалов чётных чисел в заданном диапазоне)

Здравствуйте, только начала разбираться, как программировать в Паскале. Встретила такую задачу: составить программу для вычисления суммы факториалов всех четных чисел от m до n. Причем нужно это сделать с помощью процедур. Написала вот такой код, но у меня почему-то данная программа так и не проверяет на чётность, а просто считает факториал последнего числа в заданном диапазоне. Думала над этим уже не знай сколько, а всё равно не понимаю, где именно косяк. Буду очень благодарна за помощь!

Код:
program p3; 
var 
n1, m1, i1, k, s, f1: integer; 

procedure fact(n,m:integer; var f:integer); 
var i:integer; 

begin 
f:=1; 
for i:=n to m do 
f:=f*i; 
end; 

begin 
write ('Введите N & M: '); 
readln (n1, m1); 
for i1:=n1 to m1 do 
write (i1:4); 

for i1:=n1 to m1 do 
begin 
k:=i1 mod 2; 
if k=0 then 
fact(n1,m1,f1); 
writeln(''); 
writeln('Факториал = ', f1); 
end; 

begin 
s:=0; 
s:=s+f1; 
writeln(''); 
writeln('Сумма факториалов всех чётных чисел в данном диапазоне = ', s); 
end; 

end.
kris14 вне форума Ответить с цитированием
Старый 25.10.2017, 11:29   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,103
По умолчанию

А где сумма факториалов-то?
Код:
s:=s+f1;
Тут вы прибавляете единственный последний и все...
p51x вне форума Ответить с цитированием
Старый 25.10.2017, 12:29   #3
kris14
Пользователь
 
Регистрация: 25.10.2017
Сообщений: 29
По умолчанию

Простите за глупые вопросы, но я только разбираюсь и хочу понять, как именно это работает. Вот этот момент с суммой у меня вечно вызывает трудности, пока не могу понять, как именно сделать так, чтобы он считал всю сумму, а не просто прибавлял 1 последний элемент.Если объясните, то буду очень благодарна. Я уже перепробовала все, что пришло на ум, но ничего не получается
kris14 вне форума Ответить с цитированием
Старый 25.10.2017, 12:54   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 2,935
По умолчанию

Код:
s:=0;
for i1:=n1 to m1 do 
begin 
k:=i1 mod 2; 
if k=0 then 
fact(n1,m1,f1); 
writeln(''); 
writeln('Факториал = ', f1); 
s:=s+f1; 
end; 
writeln(''); 
writeln('Сумма факториалов всех чётных чисел в данном диапазоне = ', s);
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.10.2017, 13:16   #5
kris14
Пользователь
 
Регистрация: 25.10.2017
Сообщений: 29
По умолчанию

Спасибо. Вот еще такой вопрос: почему он всё также продолжает вычислять факториал последнего числа в заданном диапазоне? Вот этот момент тоже непонятен, вроде прописываю, что для каждого числа в заданном диапазоне должен вычислять, а в итоге получается, что только для последнего...
kris14 вне форума Ответить с цитированием
Старый 25.10.2017, 13:18   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 19,061
По умолчанию

А он и вычислял, только не сохранял результат
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.10.2017, 13:47   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 2,935
По умолчанию

о5 фигню написал
Вот так надо, не?
Код:
s:=0;
for i1:=n1 to m1 do 
 begin 
  k:=i1 mod 2; 
  if k=0 then 
   begin
     fact(1,i1,f1); 
     writeln(''); 
     writeln('Факториал = ', f1); 
     s:=s+f1; 
   end;
 end; 
writeln; 
writeln('Сумма факториалов всех чётных чисел в данном диапазоне = ', s);
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.

Последний раз редактировалось Aleksandr H.; 25.10.2017 в 13:50.
Aleksandr H. вне форума Ответить с цитированием
Старый 25.10.2017, 14:04   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,260
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
Вот так надо, не?
я бы без проверки условия в цикле обошёлся.
примерно так:

Код:
  s:=0;
  i:=n1;
  if odd(i) then Inc(i);
  while i<=m1 do begin
     fact(2,i,f1); 
     writeln('Факториал ',i,'! = ', f1);
     s:=s+f1; 
     Inc(i,2);
 end; 
 writeln('Сумма факториалов всех чётных чисел в данном диапазоне = ', s);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.10.2017, 15:42   #9
kris14
Пользователь
 
Регистрация: 25.10.2017
Сообщений: 29
По умолчанию

Спасибо огромное! Разобралась благодаря Вам!
kris14 вне форума Ответить с цитированием
Ответ

Здесь нужно купить рекламу за 20 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru
Без учёта ботов - 20000 человек в день, 350000 в месяц.

Опции темы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Друзья, помогите, пожалуйста, найти ошибку в коде C# vorobvorob C# (си шарп) 2 16.05.2015 16:38
Дана непустая последовательность целых чисел. Найти: Сумму чисел, больших числа x и количество всех чётных чисел maksim97maksim Паскаль, Turbo Pascal, PascalABC.NET 1 09.04.2014 12:59
Пожалуйста помогите найти ошибку в коде решения задачи на записи GUnt Паскаль, Turbo Pascal, PascalABC.NET 3 27.12.2008 21:09
Помогите найти ошибку в коде, пожалуйста Gobl1n Паскаль, Turbo Pascal, PascalABC.NET 3 30.11.2008 17:44


Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru
Пеллетный котёл Emtas
котлы EMTAS
Здесь нужно купить рекламу за 7 тыс руб в месяц! )
пишите сюда - alarforum@yandex.ru
ИКС 840