Разделить код на процедуры: график, ввод, обсчет и вывод - Turbo Pascal
Формулировка задачи:
Решение задачи: «Разделить код на процедуры: график, ввод, обсчет и вывод»
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.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д