Основные задачи программирования с помощью языка Паскаль
Введение
Известно, что технический уровень, а, следовательно, и
конкурентоспособность выпускаемой машиностроительными предприятиями продукции в
большой степени зависят от качества проектных решений на стадии технологической
подготовки производства. В процессе технологической подготовки производства
инженерам приходится сталкиваться со сложными задачами расчетного и проектного
характера, решение которых во многих случаях с помощью традиционных методов
либо практически не возможно, либо занимает много времени. В связи с
усложнением конструкций изделий и увеличением их номенклатуры для решения
возникающих задач потребуется множество новых проектировщиков, что привело бы в
свою очередь к большим затратам. В связи с этим весьма актуальна автоматизация
технологической подготовки производства, которая имеет следующие особенности:
использование принципиально новых методологических основ проектирования;
широкое применение экономико-математических методов проектирования;
всесторонняя автоматизация инженерного труда. С появлением ЭВМ возможность
автоматизации технологической подготовки производства стала реальностью.
Появилось много систем автоматизированного проектирования (САПР), управления
производством, управления технологическими процессами и др. Возникли новые методы
решения таких задач (в отличие от традиционных), которые рассматриваются в
курсе информатики.
В качестве примеров рассмотрим основные задачи программирования с помощью
языка Паскаль.
1. Программирование нестандартных функций
.1 Составить алгоритм и программу вычисления функции
Y = ,
c использованием
нестандартной функции. Построить график функции.
.2
На языке Паскаль функцию описывают с помощью невыполняемого оператора Function1:
Function
F(x:Tk):T (где F - имя функции; x - формальный
параметр; Tk - тип параметра; T - тип имени
функции, например, целого, вещественного и др. типов). Обращение к функции
осуществляется в правой части оператора присваивания по имени F(X1,X2,Xk) ( где F - имя функции; Xk -
фактические параметры).
В
данном случае представим гиперболическую функцию тангенс в виде нестандартной
функции с формальным параметром X:
Fns(X) = Th(X) = (Exp(x) - Exp(-X)) / (Exp(X) +
Exp(-X)).
Блок-схема
к программе показана на рис. 1.
Рис.
1. Блок-схема программы вычисления функции Y = Th(x)/ - x2 :(а) - для вычисления нестандартной функции; (б)
- для вычисления функции Y.
.3 Программа вычисления и построения графика нестандартной функции:
Program GrTrFun; graph, crt; ga, gm, error: integer;
,Y,L,V:real; , MX, MX03, MX09, MSX, , MY09, MY005, MSY: INTEGER; :string[4];
z=0; Myth(x:real):Real; :=(Exp(x)-Exp(-x))/(Exp(x)+Exp(-x)); ; := DETECT; :=
DETECT;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT; ERROR <> GROK THEN ('OSHIBKA!!!',
#10#13,GRAPHERRORMSG(ERROR) ); HALT; ; := GetMaxX; MX03 := ROUND (0.3 * MX); :=
ROUND (0.9 * MX); := GetMaxY; MY09 := ROUND (0.9 * MY); := ROUND (0.05 * MY);
(12); (5, MY09, MX-10, MY09); (MX03, MY005, MX03, MY-9); (5, MY09, 15, MY09-3);
(5, MY09, 15, MY09+3); (MX-20, MY09-3, MX-10, MY09); (MX-20, MY09+3, MX-10,
MY09); (MX03, MY005, MX03-3, MY005+10); (MX03, MY005, MX03+3, MY005+10); (0, 0,
2); SetColor(14); (MX03-40, MY005, ' Y '); (MX-40, MY09-25, ' X '); (0, 0, 1);
SetColor(12); := ROUND(MY09 / 15); := -1.0; Y <= 13.501 do
(Y: 4: 1, ST); := ROUND (MY09 - MSY * Y); (MX03 + 3, A, MX03
- 3, A); (MX03 - 40, A - 3, ST); := Y + 0.5; ; := ROUND(MX09 / 6); := -1.8; X
<= 4.401 do (X : 4 : 1, ST); := ROUND(MX03 + MSX * X); (A, MY09 + 3, A, MY09
- 3); (A, MY + 15, ST); := X + 0.2; ; (2); := -1.6; X <= 2.2 do :=
Myth(X);:= (x*x-z*z); V<=0 then := X + 0.0001 else := ( L/Sqrt(V) ) + x*x;
Y<=13 then ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 2); := X + 0.0001;
ABS(X) < 1E-8 Then X := 0; ; (9); (1, 0, 4); ( ROUND(0.4 * MX), ROUND(0.1 *
MY),
'Grafic in Turbo Pascal'); (15); (1,0,4); ( ROUND(0.4 * MX),
ROUND(0.2 * MY),
'Proect: Osadchuka S.N.'); (15); (1, 0, 2);
(ROUND(0.4*MX),ROUND(0.5*MY), 'Y=Th(X)/Sqrt(x*x+z*z)+x*x'); (9);
(0, 0, 2); ( ROUND(0.4 * MX), ROUND(0.4 * MY), 'Graphik
function'); not KeyPressed do; ; .
.4 Результаты ручного счёта при z = 0:
при
х = 0 Y=th(x) / - x2 = нет корней;
при
х = 1 Y=th(x) / - x2 = 1.76;
при
х = 2 Y=th(x) / - x2 = 4.48;
Результаты
машинного счёта соответствуют графику(см. рис. 2).
.5
Вывод:
Погрешность
составляет 0%.
Рис.2
2.
Программирование операций над матрицами
.1
Составить алгоритм и программу операций над матрицами:
(Atij + Btij )×Cik .
2.2
На языке Паскаль для описания массива используют оператор Array1. Например, запись Var A: Array [1..50] of Real
указывает на то, что переменная А представляет массив, состоящий из 50
элементов вещественного типа. Запись Var C: Array
[1..Imax,1..Ymax] of Integer характеризует переменную
С, представляющую матрицу, состоящую из М строк и N столбцов,
причём М = Imax и N = Ymax. Каждый элемент матрицы целочисленного типа (Integer).Ввод
элементов осуществляется с помощью операторов Read и
операторов цикла For. Вывод элементов массива производят операторами - Write,
Writeln, For. Блок-схему к программе см. на стр.10-16.
Блок-схема
к программе:
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
.3 Программа вычисления матрицы:
Program MatrFun; crt; L=2; =3; =3; :array[1..L,1..M] of
integer; :array[1..L,1..M] of integer; :array[1..L,1..M] of integer;
:array[1..M,1..L] of integer; :array[1..M,1..L] of integer; :array[1..M,1..L]
of integer; :array[1..M,1..M] of integer; ,j,k:integer; ; i:=1 to L do j:=1 to
M do ('Vvedite element [',i,',',j,'] matricu A: A[',i,',',j,']= '); (A[i,j]); ;
i:=1 to L do j:=1 to M do ('Vvedite element [',i,',',j,'] matricu B:
B[',i,',',j,']= '); (B[i,j]); ; i:=1 to L do j:=1 to M do ('Vvedite element
[',i,',',j,'] matricu C: C[',i,',',j,']= '); (C[i,j]); ; i:=1 to L do j:=1 to M
do [j,i]:= A[i,j]; ; i:=1 to L do j:=1 to M do [j,i]:= B[i,j]; ; i:=1 to L do
j:=1 to M do[j,i]:= D[j,i]+ E[j,i]; ; j:=1 to M do k:=1 to N do [j,k]:=0; i:=1
to L do j:=1 to M do k:=1 to N do [j,k]:=Y[j,k]+(X[j,i]*C[i,k]); ; ; ; j:=1 to
M do k:=1 to N do (' ', Y[j,k]); ;
end;
readkey;
end.
2.4 Результаты ручного и машинного счёта:
Дано:
Машинный счёт:
.5 Вывод:
Погрешность составляет 0%.
3. Программирование нелинейных уравнений.
.1 Найти значение корней нелинейного уравнения Y = 3×(X - 1)4 - 3×(X - 1)2,
по методу половинного деления. Оформить графически.
.2 Суть метода половинного деления1 заключается в том, что
приближённое значение корня на каком-либо отрезке может быть найдено исходя из
физических соображений. После нахождения приближённого значения корня или
отрезка, на котором находится этот корень, последовательно, шаг за шагом,
уточняют значение корня. Составим блок-схему к программе(см.рис.3).
3.3 Программа вычисления нелинейного уравнения:
Program GrLinUravn;
uses graph, crt;
var ga, gm, error: integer;
X,Y,B,C,e,Fb,Fn,N:real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005, MSY: INTEGER; :string[4]; 10,15; := DETECT;
:= DETECT; ; ('Vvedite B: B= '); (B); ('Vvedite C: C= '); (C); ('Vvedite e: e=
'); (e); := 3*Sqr(b-1)*Sqr(b-1)-3*Sqr(b-1);
: N := (B+C)/2; := (3*Sqr(n-1)*Sqr(n-1)) - 3*Sqr(n-1);
(Abs(Fn) < e) then goto 15; (Fb*Fn) <= 0 then C:= N else := N; Fb := Fn;
; (Abs(B-C) >= e) then goto 10;
: write('N= ',N:5:3); ; ; ; (GA, GM, 'C:\TP7\BGI'); :=
GRAPHRESULT; ERROR <> GROK THEN ('OSHIBKA!!!',
#10#13,GRAPHERRORMSG(ERROR) ); HALT; ; := GetMaxX; MX03 := ROUND (0.3 * MX); :=
ROUND (0.9 * MX); := GetMaxY; MY09 := ROUND (0.9 * MY); := ROUND (0.05 * MY);
(12); (5, MY09, MX-10, MY09); (MX03, MY005, MX03, MY-9); (5, MY09, 15, MY09-3);
(5, MY09, 15, MY09+3); (MX-20, MY09-3, MX-10, MY09); (MX-20, MY09+3, MX-10,
MY09); (MX03, MY005, MX03-3, MY005+10); (MX03, MY005, MX03+3, MY005+10); (0, 0,
2); (14); (MX03-40, MY005, 'Y'); (MX-40,MY09-25, 'X'); (0, 0, 1); (12); :=
Round(MY09/23); :=-2; Y <= 20.001 do (Y: 4: 1, ST); := ROUND (MY09 - MSY *
Y); (MX03 + 3, A, MX03 - 3, A); (MX03 - 40, A - 3, ST); := Y +1.0; ; :=
ROUND(MX09 / 10); := -3; X <= 7.801 do (X : 4 : 1, ST); := ROUND(MX03 + MSX
* X); (A, MY09 + 3, A, MY09 - 3); (A, MY + 15, ST); := X + 1.0; ; (2); := -6; X
<= 21.001 do := 3*Sqr(x-1)*Sqr(x-1)-3*Sqr(x-1); Y <= 20 THEN ( ROUND(MX03
+ MSX * X), (MY09 - MSY * Y), 2); := x + 0.001; ABS(X) < 1E-8 Then X := 0; ;
(15); := N; := 3*Sqr(x-1)*Sqr(x-1)-3*Sqr(x-1); Y <= 20 THEN ( ROUND(MX03 +
MSX * X), (MY09 - MSY * Y), 15); ; (9); (1, 0, 4); ( ROUND(0.4 * MX), ROUND(0.1
* MY),
'Grafic in Turbo Pascal'); (15); (1,0,4); ( ROUND(0.4 * MX),
ROUND(0.2 * MY),
'Proect: Osadchuka S.N.'); (9); (0, 0, 2); ( ROUND(0.4 * MX),
ROUND(0.4 * MY), 'Graphik Lin. uravneniay'); not KeyPressed do; ; .
3.4 Результаты ручного и машинного счёта:
Результаты машинного счёта соответствуют графику (см. рис.4).
.5 Вывод:
Погрешность составляет 0%.
Рис.4
4. Программирование численного интегрирования
.1 Составить алгоритм и программу вычисления определённого интеграла:
S = dx + , где a=5, b=10, c=15.
Число
разбиения каждого интервала принять равным 10. Построить график.
.2
Найдём интеграл методом прямоугольников1. Составим блок-схему к
программе (см. рис. 5)
Блок
схема к программе:
Рис.5
4.3 Программа вычисления определённого интеграла:
Program GrIntegrFun; graph, crt; ga, gm, error,i: integer;
,Y,Z,k,S,S1,S2,h1,h2:real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005,
MSY: INTEGER; :string[4]; n=10; =5; =10; =15; ; := DETECT; := DETECT; :=b; S1:=
0; := (c-b)/n; i:=1 to n do := S1 + (X+1)/Sqrt(x); :=x+h1; ; := S1*h1; ('S1= ',
S1:5:3); ; :=c; S2:= 0; := (d-c)/n; i:=1 to n do := S2 + 1/(1+Exp(x)); :=x+h2;
; := S2*h2; ('S2= ', S2:5:3); ; := S1 + S2; ('S= ',S:5:3); ; ;
; (GA, GM,
'C:\TP7\BGI'); := GRAPHRESULT; ERROR <> GROK THEN ('OSHIBKA!!!',
#10#13,GRAPHERRORMSG(ERROR) ); HALT; ; := GetMaxX; MX03 := ROUND (0.3 * MX); :=
ROUND (0.9 * MX); := GetMaxY; MY09 := ROUND (0.9 * MY); := ROUND (0.05 * MY);
(12); (5, MY09, MX-10, MY09); (MX03, MY005, MX03, MY-9); (5, MY09, 15, MY09-3);
(5, MY09, 15, MY09+3); (MX-20, MY09-3, MX-10, MY09); (MX-20, MY09+3, MX-10,
MY09); (MX03, MY005, MX03-3, MY005+10); (MX03, MY005, MX03+3, MY005+10); (0, 0,
2); (14); (MX03-40, MY005, 'Y'); (MX-40,MY09-25, 'X'); (0, 0, 1); (12); :=
Round(MY09/8); :=-1.5; Y <= 7.001 do (Y: 4: 1, ST); := ROUND (MY09 - MSY * Y);
(MX03 + 3, A, MX03 - 3, A); (MX03 - 40, A - 3, ST); := Y + 0.5; ; := ROUND(MX09
/ 21); := -6.0; X <= 15.501 do (X : 4 : 1, ST); := ROUND(MX03 + MSX * X);
(A, MY09 + 3, A, MY09 - 3); (A, MY + 15, ST); := X + 1.0; ; (2); := b; X <=
c do := (x+1)/Sqrt(x); ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 2); := x +
0.001; ABS(X) < 1E-8 Then X := 0; ; (15); := b; X < c do := 0; Y <= Z
do := ((x+h1)+1)/Sqrt(x+h1); ( Round(MX03 + MSX * X), (MY09 - MSY * Y), 15); :=
Y + 0.001; ; := X + H1; ; (15); := c; Y := 0; Y <= Z do := (c+1)/Sqrt(c); (
Round(MX03 + MSX * X), (MY09 - MSY * Y), 15); := Y + 0.001; ; (15); := b; k :=
(b+h1); k <=c do := (k+1)/Sqrt(k); X <= k do ( Round(MX03 + MSX * X),
(MY09 - MSY * Y), 15); := x + 0.001; ; := k + h1; ; (2); := c; X <= d do := 1
/ ( 1 + Exp(x) ); ( Round(MX03 + MSX * X), (MY09 - MSY * Y), 2); := x + 0.001;
Abs(x) < 1E-8 Then X := 0; ; (9); (1, 0, 4); ( ROUND(0.4 * MX), ROUND(0.1 *
MY),
'Grafic in Turbo
Pascal'); (15); (1,0,4); ( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka
S.N.'); (9); (0, 0, 2); ( ROUND(0.5 * MX), ROUND(0.4 * MY), 'Graphik
Integrala'); ; ; ; .
4.4 Результаты ручного и
машинного счёта:
Ручной счёт:
Машинный счёт:
S = 15.281, что соответствует графику (см. рис.6).
.5 Вывод:
относительная погрешность
составляет 1.3%.
Рис.6
паскаль программирование функция уравнение
5. Программирование задач оптимизации
.1 Составить алгоритм и программу для вычисления наибольшего и
наименьшего значений функции y = 3×(x - 1)4 - 3×(x - 1)2 ,
на интервале [a,b] = [0;2.5] .
.2 Решаем задачу оптимизации методом перебора1, при котором
при нахождении наибольшего значения функции у перед циклом задают в качестве
наибольшего значения заведомо малую величину ɛ, а внутри цикла находят текущее значение
у при следующих условиях:
При нахождении минимальной величины функции за начальное значение
принимают заведомо большую величину, с которой сравнивают значение у с
использованием условий:
Составим блок-схему к программе (см. рис. 7).
Рис.7
5.3 Программа вычисления наибольшего и наименьшего значения функции:
Program GrOptimFun;
uses graph, crt;
var ga, gm, error: integer;
X,Y,h,Ymax,Ymin,Z,N,Nmin:real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005, MSY: INTEGER; :string[4]; b=0; =2.5; 10; :=
DETECT; := DETECT; ; ('Vvedite h: h= '); (h); :=
3*Sqr(c-1)*Sqr(c-1)-3*Sqr(c-1); := 3*Sqr(b-1)*Sqr(b-1)-3*Sqr(b-1); := b;
N<=c do := 3*Sqr(N-1)*Sqr(N-1)-3*Sqr(N-1); Z > Ymax then Ymax := Z; := N
+ h; ; ('Ymax = ', Ymax:5:3); ; := c; N >= B do :=
3*Sqr(N-1)*Sqr(N-1)-3*Sqr(N-1); Z < Ymin then Ymin := Z; := N - h; ; ('Ymin
= ', Ymin:5:3); ; ; ; ; ;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT; ERROR <> GROK THEN ('OSHIBKA!!!',
#10#13,GRAPHERRORMSG(ERROR) ); HALT; ; := GetMaxX; MX03 := ROUND (0.3 * MX); :=
ROUND (0.9 * MX); := GetMaxY; MY09 := ROUND (0.9 * MY); := ROUND (0.05 * MY);
(12); (5, MY09, MX-10, MY09); (MX03, MY005, MX03, MY-9); (5, MY09, 15, MY09-3);
(5, MY09, 15, MY09+3); (MX-20, MY09-3, MX-10, MY09); (MX-20, MY09+3, MX-10,
MY09); (MX03, MY005, MX03-3, MY005+10); (MX03, MY005, MX03+3, MY005+10); (0, 0,
2); (14); (MX03-40, MY005, 'Y'); (MX-40,MY09-25, 'X'); (0, 0, 1); (12); :=
Round(MY09/23); :=-2; Y <= 20.001 do (Y: 4: 1, ST); := ROUND (MY09 - MSY *
Y); (MX03 + 3, A, MX03 - 3, A); (MX03 - 40, A - 3, ST); := Y +1.0; ; :=
ROUND(MX09 /10); := -3; X <= 7.801 do (X : 4 : 1, ST); := ROUND(MX03 + MSX *
X); (A, MY09 + 3, A, MY09 - 3); (A, MY + 15, ST); := X + 1.0; ; (2); := -6; X
<= 21.001 do := 3*( Sqr(x-1) * Sqr(x-1) ) - 3*Sqr(x-1); Y <= 20 THEN (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 2); := x + 0.001; ABS(X) < 1E-8
Then X := 0; ; (15); := 0.3; y:= Ymin; ( ROUND(MX03 + MSX * X), (MY09 - MSY *
Y), 15); ; (15); := 1.7; y:= Ymin; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y),
15); ; (15); := 2.5; y:= Ymax; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15);
; (9); (1, 0, 4); ( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal'); (15); (1,0,4); ( ROUND(0.4 * MX),
ROUND(0.2 * MY),
'Proect: Osadchuka S.N.'); (9); (0, 0, 2); ( ROUND(0.4 * MX),
ROUND(0.4 * MY), 'Graphik Optimizacii'); not KeyPressed do; ; .
.4 Результаты ручного и машинного счёта:
Машинный счёт: Ymax = 8.43; Ymin = - 0.750
Машинный счёт соответствует графику (см. рис.8).
.5 Вывод:
На графике функции видно, что Ymax = 8.43; Ymin = - 0.75, что соответствует машинному счёту.
Рис.8
6. Программирование дифференциального уравнения
.1 Составить алгоритм и программу решения дифференциального уравнения y’ = | (1-x)Ì(1-2x)Ì(1-3x) | .
Блок-схема к программе показана на рис.9.
Рис.9
6.3 Программа решения дифференциального уравнения:
Program GrDifFun; graph, crt; ga, gm, error,i: integer;
,Y,c,c0,ck,y0,h,Fc:real; , MX, MX03, MX09, MSX, , MY09, MY005, MSY: INTEGER;
:string[4]; 5,15; ; := DETECT; := DETECT; ; ('Vvedite c0: c0 = '); (c0);
('Vvedite y0: y0 = '); (y0); ('Vvedite cK: cK = '); (cK); ('Vvedite h: h = ');
(h); := c0; := y0;
5: Fc := Fc + h*Abs((1-c)*(1-2*c)*(1-3*c)); ; ; ('c =
',c:5:3,' ':3,'Fc = ',Fc:5:3);
c := c + h; c <= cK then goto 5; ; ; ; (GA, GM,
'C:\TP7\BGI'); := GRAPHRESULT; ERROR <> GROK THEN ('OSHIBKA!!!',
#10#13,GRAPHERRORMSG(ERROR) ); HALT; END; := GetMaxX; MX03 := ROUND (0.3 * MX);
:= ROUND (0.9 * MX); := GetMaxY; MY09 := ROUND (0.9 * MY);
:= ROUND (0.05 * MY); (12); (5, MY09, MX-10, MY09); (MX03,
MY005, MX03, MY-9); (5, MY09, 15, MY09-3); (5, MY09, 15, MY09+3); (MX-20,
MY09-3, MX-10, MY09); (MX-20, MY09+3, MX-10, MY09); (MX03, MY005, MX03-3,
MY005+10); (MX03, MY005, MX03+3, MY005+10); (0, 0, 2); (14); (MX03-40, MY005,
'Y'); (MX-40,MY09-25, 'X'); (0, 0, 1); (12); := Round(MY09/15); :=-2; Y <=
13.001 do (Y: 4: 1, ST); := ROUND (MY09 - MSY * Y);(MX03 + 3, A, MX03 - 3, A);
(MX03 - 40, A - 3, ST); := Y +1.0; ; := ROUND(MX09 / 8); := -2.4; X <= 5.801
do (X : 4 : 1, ST); := ROUND(MX03 + MSX * X); (A, MY09 + 3, A, MY09 - 3); (A,
MY + 15, ST); := X + 0.2; ; (2); := -6; X <= 1.8 do :=
Abs((1-X)*(1-2*X)*(1-3*X)); Y<=13 then ( ROUND(MX03 + MSX * X), (MY09 - MSY
* Y), 2); := x + 0.001; ABS(X) < 1E-8 Then X := 0; ; (15); := c0; Y := y0; x
<= ck do := Y + h*Abs((1-x)*(1-2*x)*(1-3*x)); ( ROUND(MX03 + MSX * X), (MY09
- MSY * Y), 15); := x + h; ; (9); (1, 0, 4); ( ROUND(0.4 * MX), ROUND(0.1 *
MY),
'Grafic in Turbo Pascal'); (15); (1,0,4); ( ROUND(0.4 * MX),
ROUND(0.2 * MY),
'Proect: Osadchuka S.N.'); (9); (0, 0, 2); ( ROUND(0.4 * MX),
ROUND(0.4 * MY), 'Graphik Dif. ravneniay'); not KeyPressed do; ; .
.4 Результаты ручного и машинного счёта:
Дано:
x0 = 0; y0 = 1; xk = 3; h = 0.5;
ручной счёт: машинный счёт:
с1 = 0; у1 = 1.5; с1 = 0; у1 = 1.5;
с2 = 0.5; у2 = 1.5; с2 = 0.5; у2 = 1.5;
с3 = 1.0; у3 = 1.5; с3 = 1.0; у3 = 1.5;
с4 = 1.5; у4 = 3.2; с4 = 1.5; у4 = 3.2;
с5 = 2.0; у5 = 10.75; с5 = 2.0; у5 = 10.75;
Результаты машинного счёта соответствуют графику (см. рис.10).
.5 Вывод: относительная погрешность составляет 0%.
Рис.10
7. Программирование аппроксимации
.1 Найти аппроксимирующую функцию
Изменение функции у от аргумента х
0.1
|
0.2
|
0.3
|
0.4
|
0.5
|
0.6
|
0.7
|
-0,46
|
-0.69
|
-0.75
|
-0.69
|
-0.56
|
-0.40
|
-0.25
|
Значения х
0.8
|
0.9
|
1.0
|
1.1
|
1.2
|
1.3
|
1.4
|
-0.12
|
-0.03
|
0.00
|
-0.03
|
-0.12
|
-0.27
|
-0.30
|
Таб. 7.1.
.2 Метод решения
Решать будем методом наименьших квадратов1:
Составим
блок-схему к программе (см. рис. 11).
Рис.11
Где
К1 = , К2 = , L1
= , L2
= .
7.3 Программа вычисления функции:
GrAproksFun; graph, crt; n=14; ga, gm, error,i: integer;
,Y,K1,K2,L1,L2,A0,A1:real; ,W:Array[1..n] of real; , MX, MX03, MX09, MSX, ,
MY09, MY005, MSY: INTEGER; :string[4]; := DETECT; := DETECT; ; i:= 1 to n do
('Vvedite X[',i,']= '); (Z[i]); ; i:=1 to n do ('Vvedite Y[',i,']= '); (W[i]);
; :=0; K2:=0; :=0; L2:=0; i:=1 to n do :=K1+Z[i]; :=K2+Z[i]*Z[i]; :=L1+W[i];
:=L2+W[i]*Z[i]; ; :=(L2*K1-L1*K2)/(K1*K1-n*K2); :=(K1*L1-n*L2)/(K1*K1-n*K2); ;
('A0= ',A0:4:2, ' A1= ',A1:4:2); ; ; ; (GA, GM, 'C:\TP7\BGI'); := GRAPHRESULT;
ERROR <> GROK THEN ('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT; ;
:= GetMaxX; MX03 := ROUND (0.3 * MX); := ROUND (0.9 * MX); := GetMaxY; MY09 :=
ROUND (0.7 * MY); := ROUND (0.03 * MY); (12); (5, MY09, MX-10, MY09); (MX03,
MY005, MX03, MY-9); (5, MY09, 15, MY09-3); (5, MY09, 15, MY09+3); (MX-20,
MY09-3, MX-10, MY09); (MX-20, MY09+3, MX-10, MY09); (MX03, MY005, MX03-3,
MY005+10); (MX03, MY005, MX03+3, MY005+10); (0, 0, 2); (14); (MX03-40, MY005,
'Y'); (MX-40,MY09-25, 'X'); (0, 0, 1); (12); := Round(MY09/5); := -2; Y <=
4.501 do (Y: 4: 1, ST); := ROUND (MY09 - MSY * Y); (MX03 + 3, A, MX03 - 3, A);
(MX03 - 40, A - 3, ST); := Y +0.5; ; := ROUND(MX09 / 2); := -6; X <= 1.401
do (X : 4 : 1, ST); := ROUND(MX03 + MSX * X); (A, MY09 + 3, A, MY09 - 3); (A,
MY + 15, ST); := X + 0.1; ; (2); := -0.6; X <= 1.4 do := A0*X + A1; (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 2); := x + 0.001; ABS(X) < 1E-8
Then X := 0; ; (15); := Z[1]; Y := W[1]; ( ROUND(MX03 + MSX * X), (MY09 - MSY *
Y), 15); (15); := Z[2]; Y := W[2]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y),
15); (15); := Z[3]; Y := W[3]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15);
(15); := Z[4]; Y := W[4]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15);
:= Z[5]; Y := W[5]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); :=
Z[6]; Y := W[6]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[7];
Y := W[7]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[8]; Y :=
W[8]; ( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[9]; Y := W[9];
( ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[10]; Y := W[10]; (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[11]; Y := W[11]; (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[12]; Y := W[12]; (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[13]; Y := W[13]; (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (15); := Z[14]; Y := W[14]; (
ROUND(MX03 + MSX * X), (MY09 - MSY * Y), 15); (9); (1, 0, 4); ( ROUND(0.4 *
MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal'); (15); (1,0,4); ( ROUND(0.4 * MX),
ROUND(0.2 * MY),
'Proect: Osadchuka S.N.'); (9); (0, 0, 2); ( ROUND(0.5 * MX),
ROUND(0.4 * MY), 'Graphik Aproksimacii'); not KeyPressed do; ; .
.4 Результаты
Машинный счёт:
Подставляем значения х и у из таблицы 7.1. (см. стр.41).
А0= - 0.68; А1 =0.46.
График аппроксимирующей функции представлен на рис.12.
Ручной счёт:
;
- 0.27 -
0.30 = - 4.67;
= - 2.451
А0=
- 0.68;
А1=
0.46.
.5
Вывод по работе
Сравнивая значения машинного и ручного счёта, мы видим точное совпадение
чисел.
Рис.12
Заключение
В широком смысле под информатикой понимается фундаментальная естественная
наука, изучающая процессы сбора, накопления, передачи и обработки информации. В
конкретном случае информатика предназначена для автоматизации решения многих
инженерных проектных и расчетных задач. Она является одной из базовых
дисциплин, необходимых для изучения дисциплины «САПР технологических процессов,
инструментов и станков». В ней рассматриваются принципы разработки
математических моделей (в том числе трудно формализуемых задач), алгоритмов и
программ, а также вопросы построения некоторых вычислительных систем.
Список использованной литературы
1. Карев
Е.А. Информатика: Учебное пособие. - Ульяновск: УлГТУ, 2006. - 104с.
2. Карев
Е.А. Технологическая информатика. - Ульяновск: УлГТУ, 2006. - 52 с.
. Климова
Л.М. Практическое программирование. Решение типовых задач. - Москва, 2008. -
526с.