Интеграл, функции

DeWMax

Нужно вынести интеграл как отдельную функцию
procedure vvod(var n: integer);
begin
  write('введите n=');
  readln(n);
end;
 
function cikl(k, n: integer; fact, s, summ: real): real;
begin
  for k := 1 to n do
  begin
    fact := fact * k;
    s := (power((-1), k) * (k + 1)) / (fact);
    summ := summ + (s);
  end;
  cikl := summ;
end;
 
procedure vivod(h: real);
begin
  writeln(h);
end;
 
var
  k, n: integer;
  fact, s, summ, h: real;
 
begin
  fact := 1;
  s := 0;
  vvod(n);
  h := cikl(k, n, fact, s, summ);
  vivod(h)
end.
5 ответов

DeWMax

Плохая программа. Вычисление факториала в явном виде и вычисление членов ряда без применения рекуррентного соотношения - это... Это... Я бы эту программу у Вас не принял, и отправил бы изучать теорию. Напишите задание в том виде, в котором оно Вам было дано, восстанавливать задание по Вашей плохой и, возможно, неверной, программе - неохота, да ещё и может статься, что бессмысленно.


DeWMax

разработать алгоритм, реализовать разработанный алгоритм в виде блок-схемы и запрограммировать с использованием подпрограмм (написать программный код в среде PascalABC.NET, отладить его, запустить на выполнение, проверить на верность выводимые результаты). В частности, ввод/вывод организовать в виде процедуры. Вычисление значения реализовать либо в виде процедуры, либо в виде функции.Дано натуральное число n. Вычислить:


DeWMax

интеграл
Это не интеграл, большой греческой буквой Σ (читается: сигма) обозначается арифметическая сумма.
в среде PascalABC.NET
Судя по Вашей программе, PascalABC.NET Вы не изучали (совсем). Дело в том, что синтаксис PascalABC.NET разительно отличается от синтаксиса прочих диалектов паскаля. Спишем это дело на некомпетентность Вашего преподавателя.Ну да ладно.Найдём рекуррентное соотношение для членов ряда, то есть, некую формулу, с помощью которой можно вычислить последующий член ряда на основе предыдущего. РядПервый член рядаk-й член ряда(k-1)-й член рядаДелим ak на ak-1 Выразим последующий член ряда через предыдущийПервый член ряда известен, последующий член ряда выражен через предыдущий. Рекуррентное соотношение найдено.Параметр n не может быть менее 1, поэтому в процедуре ввода логично применить проверку на корректность введённого значения. Так как сумма должна быть вычислена как функция, можно просто предать значение функции процедуре вывода.Пишем программу.
{Процедура ввода целого числа с проверкой}
procedure readln_query(m: string; var v: longint);
begin
  repeat {повторяем...}
    write(m, ' > 0;  ', m, ' = '); {печатаем приглашение ввода числа}
    readln(v) {вводим число}
  until v > 0 {повторяем ввод до тех пор, пока не будет введено допустимое число}
end;
 
{Функция вычисления суммы ряда}
function sum(const n: longint): real;
var
  k: longint; {номер очередного члена ряда}
  a, s: real; {очередной член ряда, текущая сумма ряда}
begin
  a := -2; {первый член ряда}
  s := a; {текущая сумма пока равна первому члену ряда}
  for k := 2 to n do {цикл по оставшимся членам ряда (т.е, по всем, кроме первого)}
    begin
      a := -a * (k + 1) / k / k; {вычисляем очередной член ряда}
      s := s + a {и складываем его значение с текущей суммой}
    end;
  sum := s {возвращаемое значение функции равно сумме ряда}
end;
 
{Процедура вывода вещественного числа}
procedure print(m: string; const v: real);
begin
  writeln(m, v:0:12) {выводим соответствующий текст и само число}
end;
 
var
  n: longint; {количество членов ряда}
 
begin
  readln_query('n', n); {вводим количество членов ряда}
  print('S = ', sum(n)); {печатаем сумму ряда}
  readln {ждём нажатия клавиши <Enter> перед закрытием программы}
end.
Как видите, не нужно явного вычисления факториала и степени. Программа подойдёт для любого диалекта паскаля, в том числе, и для Pascal ABC.NET (будет замечание о том, что переменную цикла нужно объявлять в самом цикле, а не в секции var), однако, с учётом синтаксиса Pascal ABC.NET эта программа может быть написана несколько короче. Для универсальности в обеих процедурах есть первый формальный параметр (строка m). В принципе, эти формальные параметры можно убрать, и печатать нужный текст непосредственно в процедурах.Блок-схемы изобразить не могу: у меня на данный момент ну очень медленный интернет, что-либо скачать для рисования блок-схем не представляется возможным, и отправить просто фотографии нарисованных от руки блок-схем тоже вряд ли удастся. Блок-схем должно быть четыре: для основной программы, для обеих процедур и для функции.


DeWMax

подскажите , что можно почитать для изучения Pascal ABC , книги там какие-то или ссылки может


DeWMax

Люди вот это читали.. Литература по PascalABC.NET