Разделить код на процедуры: график, ввод, обсчет и вывод - Turbo Pascal

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

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

Помогите разделить на процедуры, график, ввод, обсчет и вывод?

Решение задачи: «Разделить код на процедуры: график, ввод, обсчет и вывод»

textual
Листинг программы
uses crt,graph;
function F(x:real):real;
begin
F:=1.6*x*x-6*x+1.6 {функция}
end;
function f1(x:real):real;
begin
f1:=3.2*x-6;
end;
type iteration=array[0..200] of real;
procedure grafik;
var x0,y0,i:integer;
    a,b,x,x1,x2,max,min,mx,my:real;
    s,s1:string;
begin
x0:=0;
initgraph(x0,y0,'');{инициализация графического режима}
a:=-2;
b:=1.5;{интервал по Х}
x0:=round(-a*getmaxX/(b-a));{начало координат по Х}
mx:=(x0-30)/-a;{масштаб по Х}
x:=a; {найдем мин и макс для масштаба по Y}
min:=F(x);
max:=min;
while x<=b do
 begin
  if F(x)<min then min:=F(x);
  if F(x)>max then max:=F(x);
  x:=x+0.01;
 end;
y0:=round(max*getmaxY/(max-min));{начало координат по Y}
if max>abs(min) then my:=(y0-10)/max
else my:=(y0-10)/abs(min);
setlinestyle(0,0,3);
setcolor(white);
line(0,y0,getmaxX,y0);{оси}
line(x0,0,x0,getmaxY);
setlinestyle(3,0,1);
setcolor(green);
for i:=1 to 20 do{максимальное количество засечек в одну сторону}
 begin
  line(0,y0-round(i*my*10),getmaxX,y0-round(i*my*10));{засечки на оси У}
  line(0,y0+round(i*my*10),getmaxX,y0+round(i*my*10));
  {подпись оси У}
  str(i*10:3,s);
  settextstyle(0,0,1);{горизонтальный шрифт}
  setcolor(white);
  outtextXY(x0-35,y0-round(i*my*10),s);{соответственно засечкам}
  outtextXY(x0-40,y0+round(i*my*10),'-'+s);
  setcolor(green);
  line(x0+round(i*mx/10),0,x0+round(i*mx/10),getmaxY); {засечки на оси Х}
  line(x0-round(i*mx/10),0,x0-round(i*mx/10),getmaxY);
  {подпись оси Х}
  if i mod 2=0 then
   begin
    str(i/10:0:1,s);
    settextstyle(0,1,1);{вертикальный шрифт}
    setcolor(white);
    outtextXY(x0+round(i*mx/10)+5,y0+10,s);
    outtextXY(x0-round(i*mx/10)+5,y0+10,s);
    setcolor(green);
    outtextXY(x0-round(i*mx/10)+5,y0+10,'-');
   end;
 end;
{центр}
settextstyle(0,0,1);
setcolor(white);
outtextXY(x0-15,y0+10,'0');
{подписи концов осей}
settextstyle(0,0,1);
setcolor(white);
outtextXY(getmaxX-10,y0-10,'X');
outtextXY(x0+5,10, 'Y');
{график}
x:=a;
x1:=a;
while x<=b do
 begin
  putpixel(x0+round(x*mx),y0-round(F(x)*my),12);
  x:=x+0.001;
  if F(x1)*F(x1+1)<0 then x2:=x1;
  x1:=x1+1;
 end;
{название}
settextstyle(0,0,1);
setcolor(12);
outtextXY(160,10,'y=1.6x^2-6x+1.6');
outtextXY(160,30,'int.[-2;1.5]');
{интервал корня}
str(x2:0:1,s);
str(x2+1:0:1,s1);
outtextXY(150,50,'int.kornya['+s+';'+s1+']');
readln;
closegraph;
end;
procedure vvod(var h,e:real);
begin
write('Vvedit nabluzene znachenna:');
readln(h);
write('Vvedit tochnict E:');
readln(e);
end;
procedure obschet(h,e:real;var it1,it2:iteration;var x1,x2:real;var k:integer);
var kp,kp1:real;
begin
x2:=h;
k:=-1;
repeat
x1:=x2;
kp:=f(x1);
kp1:=f1(x1);
x2:=x1-(kp/kp1);
k:=k+1;
it1[k]:=kp;
it2[k]:=kp1;
until abs(kp)<=e;
end;
procedure vyvod(var fil:text;k:integer;it1,it2:iteration;x1,x2:real);
var i:integer;
begin
assign(fil,'matrix.txt');
rewrite(fil);
for i:=0 to k do
 begin
  writeln(i+1,'-iteratia:');
  writeln(fil,i+1,'-iteratia:');
  writeln('Function:',it1[i]:0:8,' Poxidna:',it2[i]:0:8,' X=',X1:0:8);
  writeln(fil,'Function:',it1[i]:0:8,' Poxidna:',it2[i]:0:8,' X=',X1:0:8);
  delay(400);
 end;
writeln;
writeln(fil,'');
write('Korin: ',x2:3:1);
write(fil,'Korin: ',x2:3:1);
readkey
end;
var it1,it2:iteration;
    fil:text;
    k:integer;
    h,e,x1,x2:real;
begin
grafik;
vvod(h,e);
obschet(h,e,it1,it2,x1,x2,k);
vyvod(fil,k,it1,it2,x1,x2);
end.

Объяснение кода листинга программы

Код начинается с определения функций F и f1, которые используются в последующих процедурах. Затем идет определение типа данных iteration, который будет использоваться для хранения промежуточных значений. Далее следует процедура grafik, которая инициализирует графический режим, задает начальные координаты по Х и Y, а затем выполняет графический рисунок. В этой процедуре используется цикл while для нахождения минимального и максимального значений функции F, а также для построения засечек на оси Х и Y. Затем идет процедура vvod, которая запрашивает у пользователя ввод значений h и e. Процедура obschet выполняет итерационный процесс для нахождения корней функции f. Здесь используется цикл repeat до тех пор, пока абсолютное значение kp (произведения f(x1) и f1(x1)) не станет меньше e. Значения k, x1 и x2 обновляются на каждой итерации. Наконец, процедура vyvod выводит результаты на файл matrix.txt. В этой процедуре используется цикл for для вывода промежуточных значений, включая функцию, poxidna и значение X. После этого выводится значение корня x2. В конце кода идет основной блок программы, который включает в себя вызов процедур grafik, vvod, obschet и vyvod.

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


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

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

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