Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 24.02.2018, 20:58   #1 (permalink)
NomadZ
Member
 
Регистрация: 14.12.2017
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Итерационные циклы for … to … do ЯП- Pascal

Здравствуйте, помогите пожалуйста с написанием кода для следующего задания на Pascal'е. И если не затруднит добавить комментарии для большего понимания.
Задача:
Миниатюры
yi-3.png  
NomadZ вне форума   Ответить с цитированием

Старый 24.02.2018, 20:58
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Возможно вы моментально найдете решение своей задачи ознакомившись с этими ссылками

Pascal, циклы
Pascal, циклы, управляемые условиями
Pascal, циклы, управляемые условиями
Итерационные формулы

Старый 24.02.2018, 21:12   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от NomadZ Посмотреть сообщение
Здравствуйте, помогите пожалуйста с написанием кода для следующего задания на Pascal'е. И если не затруднит добавить комментарии для большего понимания.
Тут кое-чего не хватает. А именно — самой функции.
Vladimir_S вне форума   Ответить с цитированием
Старый 24.02.2018, 21:16   #3 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

И вообще, эта задача уже была у нас:
Нужно вычислить площадь фигуры. Delphi7
Vladimir_S вне форума   Ответить с цитированием
Старый 24.02.2018, 21:39   #4 (permalink)
NomadZ
Member
 
Регистрация: 14.12.2017
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Получается что в моем случае программа будет выглядеть примерно так?
Код:
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.
NomadZ вне форума   Ответить с цитированием
Старый 24.02.2018, 22:00   #5 (permalink)
Vladimir_S
Специалист
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
По умолчанию

Цитата:
Сообщение от NomadZ Посмотреть сообщение
Получается что в моем случае программа будет выглядеть примерно так?
Не совсем. Надо всё-таки хоть немного вникнуть, а не тупо передирать. Функция Antider (сокр. от Antideriviative) — это первообразная. А потому в Вашем случае это будет так:
Код:
function Antider(y:real):Real;
 begin
  Antider:=sin(y);
 end;
Что касается самой программы — оттранслируйте, запустите да посмотрите на результат. Должно получиться что-то около 0.
P.S. Мне кажется, функция Cos выбрана неудачно: лучше бы что-нибудь положительное во всём интервале. Или, если уж Вы непременно хотите косинус, то интервал лучше выбрать от -π/2 до +π/2. Тогда в результате должно получиться 2.
P.P.S. Величину
π в явном виде задавать не надо, есть стандартная константа Pi.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 24.02.2018, 22:20   #6 (permalink)
NomadZ
Member
 
Регистрация: 14.12.2017
Сообщений: 18
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию

Да вы правы именно 2 и получается при y=cosx в отрезке от -π/2 до +π/2.
NomadZ вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:05.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.