Найти ошибку в программе и исправить её - 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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д