• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Итерационные циклы for … to … do ЯП- Pascal

  • Автор темы Автор темы NomadZ
  • Дата начала Дата начала

NomadZ

Новые
Регистрация
14 Дек 2017
Сообщения
18
Реакции
0
Баллы
0
Итерационные циклы for … to … do ЯП- Pascal

Здравствуйте, помогите пожалуйста с написанием кода для следующего задания на Pascal'е. И если не затруднит добавить комментарии для большего понимания.
Задача:
 

Вложения

  • яп 3.png.webp
    яп 3.png.webp
    31.2 KB · Просмотры: 148
Здравствуйте, помогите пожалуйста с написанием кода для следующего задания на Pascal'е. И если не затруднит добавить комментарии для большего понимания.
Тут кое-чего не хватает. А именно — самой функции.
 
Получается что в моем случае программа будет выглядеть примерно так?
Код:
uses
  SysUtils;

const
 x0=0;
 xk=2*3.14;
 eps=1E-7;

var
 n,i:integer;
 s,x,h,s1,x1,delta:real;

function f(y:real):real;
begin
 f:=cos(x);
end;

function Antider(y:real):real;
 begin
  Antider:=-y*y*y+y*y*15/2-y*18;
 end;

Begin
 n:=2;
 s:=(f(x0)+f((x0+xk)/2))*(xk-x0)/4+(f((x0+xk)/2)+f(xk))*(xk-x0)/4;
 delta:=1;
 While delta>eps do
  begin
   s1:=s;
   n:=n+2;
   h:=(xk-x0)/n;
   x:=x0;
   s:=0;
   for i:=1 to n do
    begin
     x1:=x+h;
     s:=f(x)+f(x1)+s;
     x:=x1;
    end;
   s:=s*h/2;
   delta:=abs(s-s1);
  end;
 writeln('Trapezium:');
 writeln('s = ',s:0:10);
 writeln('s1= ',s1:0:10);
 writeln('n= ',n);
 writeln;

 n:=2;
 s:=(f(x0)+f((x0+xk)/2)*4+f(xk))*(xk-x0)/6;
 delta:=1;
 While delta>eps do
  begin
   s1:=s;
   n:=n+2;
   h:=(xk-x0)/n;
   x:=x0;
   s:=0;
   for i:=1 to (n div 2) do
    begin
     x1:=x+h*2;
     s:=f(x)+f(x+h)*4+f(x1)+s;
     x:=x1;
    end;
   s:=s*h/3;
   delta:=abs(s-s1);
  end;
 writeln('Simpson:');
 writeln('s = ',s:0:10);
 writeln('s1= ',s1:0:10);
 writeln('n= ',n);
 writeln;
 Write('Accurate value: ');
 Writeln((Antider(xk)-Antider(x0)):0:10);
 Readln
End.
 
Получается что в моем случае программа будет выглядеть примерно так?
Не совсем. Надо всё-таки хоть немного вникнуть, а не тупо передирать. Функция Antider (сокр. от Antideriviative) — это первообразная. А потому в Вашем случае это будет так:
Код:
function Antider(y:real):Real;
 begin
  Antider:=sin(y);
 end;
Что касается самой программы — оттранслируйте, запустите да посмотрите на результат. Должно получиться что-то около 0.
P.S. Мне кажется, функция Cos выбрана неудачно: лучше бы что-нибудь положительное во всём интервале. Или, если уж Вы непременно хотите косинус, то интервал лучше выбрать от -π/2 до +π/2. Тогда в результате должно получиться 2.
P.P.S. Величину
π в явном виде задавать не надо, есть стандартная константа Pi.
 
Да вы правы именно 2 и получается при y=cosx в отрезке от -π/2 до +π/2.
 
Назад
Сверху