Найти ошибку в программе и исправить её - Pascal ABC

Узнай цену своей работы

Формулировка задачи:

Функция f(x,y)=sqrt((1+cos(2*x))/y); Интервал [pi/4;pi] Начальное условие y(a)=1 Пишет ошибка в 44 строке...

Решение задачи: «Найти ошибку в программе и исправить её»

textual
Листинг программы
program kursovaya_Runge_Kutt_Eiler;
uses crt,graphABC;
const 
h=3*pi/4000;{Точность}
var 
  i,j,p:integer;
  n,q:real;
  s:string;   { Строка } 
  r1,r2,r3,r4,yi,xi,dy,xm,ym:real;
  {Одномерные массивы решения данного дифф. уравнения}
  a:array[0..1000] of real;
  b:array[0..1000] of real;
  a1:array[0..1000] of real;
  b1:array[0..1000] of real;
{Данное дифф. уравнение} 
function f(x,y:real):real;
  begin 
    f:=sqrt((1+cos(2*x))/y); 
  end;
begin 
clrscr;
 {Начальное значение интервала}
xi:=Pi/4; 
{Начальное условие}
yi:=1; 
{Начальные номера массивов}
i:=0; j:=0; 
 {Начальное значение интервала}
xm:=Pi/4; 
{Начальное условие}
ym:=1;
q:=0.5;
{Метод Рунге-Кутты}
  writeln('Метод Рунге-Кутты:');
  writeln('№=',i, '     | ','x=',xi:5:3, ' | ','y=',yi:5:3);
  repeat
    r1:=h*f(xi,yi);
    r2:=h*f(xi+h/2,yi+r1/2);
    r3:=h*f(xi+h/2,yi+r2/2);
    r4:=h*f(xi+h,yi+r3);
    dy:=(r1+2*r2+2*r3+r4)/6;
    yi:=yi+dy;
    xi:=xi+h;
    a[i]:=xi;{Заполнение массива элементом x}
    b[i]:=yi;{Заполнение массива элементом y}
    i:=i+1;{Счётчик}
    if i mod 100=0 then
    { Вывод результатов }
    writeln('№=',i/100, ' | ','x=',xi:5:3, ' | ','y=',yi:5:3);
  until xi>Pi;
readln;
{Метод Эйлера}
writeln('Метод Эйлера:');
writeln('№=',j/100, '      | ','x=',xm:5:3, ' | ','y=',ym:5:3);
  repeat
    ym:=ym+h*f(xm,ym);
    xm:=xm+h;
    a1[j]:=xm;{Заполнение массива элементом x}
    b1[j]:=ym;{Заполнение массива элементом y}
    j:=j+1;{Счётчик}
    if j mod 100=0 then
    { Вывод результатов }
    writeln('№=',j/100, '  | ','x=',xm:5:3, ' | ','y=',ym:5:3);
  until xm>Pi;
{ Построение графика функции }
SetWindowHeight(700);{Высота экрана в пикселях}
  SetWindowWidth(900);{Ширина экрана в пикселях}
  SetPenColor(clBlack);{Цвет линий}
    SetPenWidth(2);{Толщина линий в пикселях}
    {Построение осей графика 0xy}
    line(180,600,900,600);
    line(220,0,220,700);
    line(220,0,220-10,10);
    line(220,0,220+10,10);
    line(900,600,900-10,600-10);
    line(900,600,900-10,600+10);
{Построение шкал графика}
for p:=1 to 7 do
   begin
    line(220+75*p,595,220+75*p,605);
    line(215,0+75*p,225,0+75*p);
   end;
{Вывод на экран текста,заключённого в ' '}
TextOut(205,580,'0');
TextOut(880,580,'x');
TextOut(225,15,'y');
{Вывод на экран цифрового значения шкал по X}
for p:=1 to 7 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(220+75*p,580,s);{Вывод элемента s на экран}
    q:=q+0.5;{Счётчик}
  end;
{Вывод на экран цифрового значения шкал по Y}
q:=0.5;
for p:=1 to 7 do
  begin
    str(q:4:1,s);{Преобразует элемент q в строковый s}
    TextOut(180,595-75*p,s);{Вывод элемента s на экран}
    q:=q+0.5;{Счётчик}
  end;
  {Построение сетки графика}
for p:=1 to 8 do
  begin
   SetPenColor(clGreen);{Цвет сетки}
   SetPenWidth(1);{Толщина линий сетки в пискелях}
   line(200,75+75*p,900,75+75*p);{Построение линий сетки по горизонтали}
   line(220+75*p,0,220+75*p,700);{Построение линий сетки по вертикали}
  end;
  {Построение графика функции}
  while p<=1000 do {Кол-во точек графика}
    begin
    n:=175;{коэф.}
    Setpixel(round(a[p]*(n/4)+700),round(abs(b[p]*n)+77),clRed); {Вывод на экран пикселей с указанным цветом 1-го графика}
    Setpixel(round(a1[p]*(n/4)+700),round(abs(b1[p]*n)+77),clBlue);{Вывод на экран пикселей с указанным цветом 2-го графика}
    p:=p+1;{Счётчик}
    end;
readln;
end.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы