// PascalABC.Net var a,b,h,x,F:double; begin h:=0.1; Write('Введите через пробел границы интервала табудяции: '); Read(a,b); x:=a; while x<=b+(h/2) do begin F:=5*sin(x)+cos(sqr(x)); Writeln(x:8:5, F:10:5); x:=x+h end; end.
Замечание: В цикле while x<=b+(h/2) do прибавление половины шага гарантирует, что несмотря на погрешности представления чисел в компьютере, цикл будет выполнен и для конечной точки интервала.
Сначала надо найти аналитическое решение задачи. Определить координаты точек пересечения двух функций - это совместно решить уравнения, описывающего функции.
Теперь можно составить программу, предусмотрев в ней анализ случаев D<0, D=0 и D>0.
uses Crt; var k,b,c,x1,x2,y1,y2,d:real; begin ClrScr; Write('Введите через пробел c,k,b: '); Read(c,k,b); d:=sqr(k)-4*(c-b); if d<0 then Writeln('Точек пересечения нет') else if d=0 then begin x1:=k/2; y1:=k*x1+b; Writeln('Координаты точки пересечения (',x1:0:4,',',y1:0:4,')') end else begin d:=sqrt(d); x1:=(k-d)/2; y1:=k*x1+b; x2:=(k+d)/2; y2:=k*x2+b; Writeln('Координаты точек пересечения:'); Writeln('(',x1:0:4,',',y1:0:4,'), (',x2:0:4,',',y2:0:4,')') end; ReadKey end.
var
a,b,h,x,F:double;
begin
h:=0.1;
Write('Введите через пробел границы интервала табудяции: ');
Read(a,b);
x:=a;
while x<=b+(h/2) do begin
F:=5*sin(x)+cos(sqr(x));
Writeln(x:8:5, F:10:5);
x:=x+h
end;
end.
Тестовое решение
Введите через пробел границы интервала табудяции: -2 3
-2.00000 -5.20013
-1.90000 -5.62379
-1.80000 -5.86440
-1.70000 -5.92684
-1.60000 -5.83346
-1.50000 -5.61565
-1.40000 -5.30670
-1.30000 -4.93671
-1.20000 -4.52977
-1.10000 -4.10302
-1.00000 -3.66705
-0.90000 -3.22714
-0.80000 -2.78468
-0.70000 -2.33876
-0.60000 -1.88732
-0.50000 -1.42822
-0.40000 -0.95986
-0.30000 -0.48165
-0.20000 0.00585
-0.10000 0.50078
0.00000 1.00000
0.10000 1.49912
0.20000 1.99255
0.30000 2.47355
0.40000 2.93432
0.50000 3.36604
0.60000 3.75911
0.70000 4.10342
0.80000 4.38888
0.90000 4.60613
1.00000 4.74766
1.10000 4.80906
1.20000 4.79062
1.30000 4.69887
1.40000 4.54780
1.50000 4.35930
1.60000 4.16228
1.70000 3.98981
1.80000 3.87408
1.90000 3.83921
2.00000 3.89284
2.10000 4.01825
2.20000 4.16975
2.30000 4.27455
2.40000 4.24355
2.50000 3.99181
2.60000 3.46597
2.70000 2.67145
2.80000 1.68892
2.90000 0.66844
3.00000 -0.20553
Замечание: В цикле while x<=b+(h/2) do прибавление половины шага гарантирует, что несмотря на погрешности представления чисел в компьютере, цикл будет выполнен и для конечной точки интервала.
Определить координаты точек пересечения двух функций - это совместно решить уравнения, описывающего функции.
Теперь можно составить программу, предусмотрев в ней анализ случаев D<0, D=0 и D>0.
uses Crt;
var
k,b,c,x1,x2,y1,y2,d:real;
begin
ClrScr;
Write('Введите через пробел c,k,b: '); Read(c,k,b);
d:=sqr(k)-4*(c-b);
if d<0 then Writeln('Точек пересечения нет')
else
if d=0 then begin
x1:=k/2; y1:=k*x1+b;
Writeln('Координаты точки пересечения (',x1:0:4,',',y1:0:4,')')
end
else begin
d:=sqrt(d);
x1:=(k-d)/2; y1:=k*x1+b;
x2:=(k+d)/2; y2:=k*x2+b;
Writeln('Координаты точек пересечения:');
Writeln('(',x1:0:4,',',y1:0:4,'), (',x2:0:4,',',y2:0:4,')')
end;
ReadKey
end.
Тестовые решения:
Введите через пробел c,k,b: -2 1 1
Координаты точек пересечения:
(-1.3028,-0.3028), (2.3028,3.3028)
Введите через пробел c,k,b: 1 3 -5
Точек пересечения нет
Введите через пробел c,k,b: 12 6 3
Координаты точки пересечения (3.0000,21.0000)