Основные задачи программирования с помощью языка Паскаль
Программирование нестандартных функций, задач оптимизации, дифференциального уравнения и аппроксимации с помощью языка Паскаль. Алгоритм и программа операций над матрицами. Нахождение значения корней нелинейного уравнения по методу половинного деления.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 12.08.2011 |
Размер файла | 1,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Известно, что технический уровень, а, следовательно, и конкурентоспособность выпускаемой машиностроительными предприятиями продукции в большой степени зависят от качества проектных решений на стадии технологической подготовки производства. В процессе технологической подготовки производства инженерам приходится сталкиваться со сложными задачами расчетного и проектного характера, решение которых во многих случаях с помощью традиционных методов либо практически не возможно, либо занимает много времени. В связи с усложнением конструкций изделий и увеличением их номенклатуры для решения возникающих задач потребуется множество новых проектировщиков, что привело бы в свою очередь к большим затратам. В связи с этим весьма актуальна автоматизация технологической подготовки производства, которая имеет следующие особенности: использование принципиально новых методологических основ проектирования; широкое применение экономико-математических методов проектирования; всесторонняя автоматизация инженерного труда. С появлением ЭВМ возможность автоматизации технологической подготовки производства стала реальностью. Появилось много систем автоматизированного проектирования (САПР), управления производством, управления технологическими процессами и др. Возникли новые методы решения таких задач (в отличие от традиционных), которые рассматриваются в курсе информатики.
В качестве примеров рассмотрим основные задачи программирования с помощью языка Паскаль.
1. Программирование нестандартных функций
1.1 Составить алгоритм и программу вычисления функции
Y = ,
c использованием нестандартной функции. Построить график функции.
1.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.
1.3 Программа вычисления и построения графика нестандартной функции:
Program GrTrFun;
uses graph, crt;
var ga, gm, error: integer;
X,Y,L,V:real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005, MSY: INTEGER;
ST:string[4];
const z=0;
function Myth(x:real):Real;
begin
Myth:=(Exp(x)-Exp(-x))/(Exp(x)+Exp(-x));
end;
begin
GA := DETECT;
GM := DETECT;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT;
IF ERROR <> GROK THEN
BEGIN
WRITELN('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT;
END;
MX := GetMaxX; MX03 := ROUND (0.3 * MX);
MX09 := ROUND (0.9 * MX);
MY := GetMaxY; MY09 := ROUND (0.9 * MY);
MY005 := ROUND (0.05 * MY);
SetColor(12);
Line(5, MY09, MX-10, MY09);
Line(MX03, MY005, MX03, MY-9);
Line(5, MY09, 15, MY09-3);
Line(5, MY09, 15, MY09+3);
Line(MX-20, MY09-3, MX-10, MY09);
Line(MX-20, MY09+3, MX-10, MY09);
Line(MX03, MY005, MX03-3, MY005+10);
Line(MX03, MY005, MX03+3, MY005+10);
SetTextStyle(0, 0, 2); SetColor(14);
OutTextXY (MX03-40, MY005, ' Y ');
OutTextXY (MX-40, MY09-25, ' X ');
SetTextStyle(0, 0, 1); SetColor(12);
MSY := ROUND(MY09 / 15);
Y := -1.0;
While Y <= 13.501 do
begin
STR(Y: 4: 1, ST);
A := ROUND (MY09 - MSY * Y);
Line (MX03 + 3, A, MX03 - 3, A);
OutTextXY (MX03 - 40, A - 3, ST);
Y:= Y + 0.5;
END;
MSX := ROUND(MX09 / 6);
X := -1.8;
While X <= 4.401 do
begin
STR(X : 4 : 1, ST);
A := ROUND(MX03 + MSX * X);
Line(A, MY09 + 3, A, MY09 - 3);
OutTextXY(A, MY + 15, ST);
X := X + 0.2;
end;
SetColor(2);
X := -1.6;
While X <= 2.2 do
begin
L := Myth(X);
V := (x*x-z*z);
if V<=0 then
X := X + 0.0001 else
Y := ( L/Sqrt(V) ) + x*x;
if Y<=13 then
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 2);
X := X + 0.0001;
IF ABS(X) < 1E-8 Then X := 0;
end;
SetColor(9);
SetTextStyle(1, 0, 4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal');
SetColor(15);
SetTextStyle(1,0,4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka S.N.');
SetColor(15);
SetTextStyle(1, 0, 2);
OutTextXY(ROUND(0.4*MX),ROUND(0.5*MY), 'Y=Th(X)/Sqrt(x*x+z*z)+x*x');
SetColor(9);
SetTextStyle(0, 0, 2);
OutTextXY( ROUND(0.4 * MX), ROUND(0.4 * MY), 'Graphik function');
While not KeyPressed do;
CloseGraph;
end.
1.4 Результаты ручного счёта при z = 0:
при х = 0 Y=th(x) / - x2 = нет корней;
при х = 1 Y=th(x) / - x2 = 1.76;
при х = 2 Y=th(x) / - x2 = 4.48;
Результаты машинного счёта соответствуют графику(см. рис. 2).
1.5 Вывод:
Погрешность составляет 0%.
Рис.2
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.
Блок-схема к программе:
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
Да
2.3 Программа вычисления матрицы:
Program MatrFun;
uses crt;
const L=2;
M=3;
N=3;
VAR
A:array[1..L,1..M] of integer;
B:array[1..L,1..M] of integer;
C:array[1..L,1..M] of integer;
D:array[1..M,1..L] of integer;
E:array[1..M,1..L] of integer;
X:array[1..M,1..L] of integer;
Y:array[1..M,1..M] of integer;
i,j,k:integer;
begin
clrscr;
for i:=1 to L do
for j:=1 to M do
begin
write('Vvedite element [',i,',',j,'] matricu A: A[',i,',',j,']= ');
read(A[i,j]);
end;
for i:=1 to L do
for j:=1 to M do
begin
write('Vvedite element [',i,',',j,'] matricu B: B[',i,',',j,']= ');
read(B[i,j]);
end;
for i:=1 to L do
for j:=1 to M do
begin
write('Vvedite element [',i,',',j,'] matricu C: C[',i,',',j,']= ');
read(C[i,j]);
end;
for i:=1 to L do
for j:=1 to M do
begin
D[j,i]:= A[i,j];
end;
for i:=1 to L do
for j:=1 to M do
begin
E[j,i]:= B[i,j];
end;
for i:=1 to L do
for j:=1 to M do
begin
X[j,i]:= D[j,i]+ E[j,i];
end;
for j:=1 to M do
for k:=1 to N do
Y[j,k]:=0;
for i:=1 to L do
for j:=1 to M do
for k:=1 to N do
begin
Y[j,k]:=Y[j,k]+(X[j,i]*C[i,k]);
end;
writeln;
writeln;
for j:=1 to M do
begin
for k:=1 to N do
write(' ', Y[j,k]);
writeln;
end;
readkey;
end.
2.4 Результаты ручного и машинного счёта:
Дано:
Машинный счёт:
2.5 Вывод:
Погрешность составляет 0%.
3. Программирование нелинейных уравнений.
3.1 Найти значение корней нелинейного уравнения Y = 3(X - 1)4 - 3(X - 1)2, по методу половинного деления. Оформить графически.
3.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;
ST:string[4];
Label 10,15;
begin
GA := DETECT;
GM := DETECT;
begin
clrscr;
Write('Vvedite B: B= ');
read(B);
Write('Vvedite C: C= ');
read(C);
Write('Vvedite e: e= ');
Read(e);
Fb:= 3*Sqr(b-1)*Sqr(b-1)-3*Sqr(b-1);
10: N := (B+C)/2;
Fn:= (3*Sqr(n-1)*Sqr(n-1)) - 3*Sqr(n-1);
if (Abs(Fn) < e) then goto 15;
if (Fb*Fn) <= 0 then C:= N else
begin
B := N; Fb := Fn;
end;
if (Abs(B-C) >= e) then goto 10;
15: write('N= ',N:5:3);
ReadKey;
KeyPressed;
end;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT;
IF ERROR <> GROK THEN
BEGIN
WRITELN('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT;
END;
MX := GetMaxX; MX03 := ROUND (0.3 * MX);
MX09 := ROUND (0.9 * MX);
MY := GetMaxY; MY09 := ROUND (0.9 * MY);
MY005 := ROUND (0.05 * MY);
SetColor(12);
Line(5, MY09, MX-10, MY09);
Line(MX03, MY005, MX03, MY-9);
Line(5, MY09, 15, MY09-3);
Line(5, MY09, 15, MY09+3);
Line(MX-20, MY09-3, MX-10, MY09);
Line(MX-20, MY09+3, MX-10, MY09);
Line(MX03, MY005, MX03-3, MY005+10);
Line(MX03, MY005, MX03+3, MY005+10);
SetTextStyle(0, 0, 2);
SetColor(14);
OutTextXY(MX03-40, MY005, 'Y');
OutTextXY(MX-40,MY09-25, 'X');
SetTextStyle(0, 0, 1);
SetColor(12);
MSY := Round(MY09/23);
Y:=-2;
While Y <= 20.001 do
begin
STR(Y: 4: 1, ST);
A := ROUND (MY09 - MSY * Y);
Line (MX03 + 3, A, MX03 - 3, A);
OutTextXY (MX03 - 40, A - 3, ST);
Y:= Y +1.0;
end;
MSX := ROUND(MX09 / 10);
X := -3;
While X <= 7.801 do
begin
STR(X : 4 : 1, ST);
A := ROUND(MX03 + MSX * X);
Line(A, MY09 + 3, A, MY09 - 3);
OutTextXY(A, MY + 15, ST);
X := X + 1.0;
end;
SetColor(2);
X := -6;
While X <= 21.001 do
begin
Y := 3*Sqr(x-1)*Sqr(x-1)-3*Sqr(x-1);
if Y <= 20 THEN
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 2);
x := x + 0.001;
IF ABS(X) < 1E-8 Then X := 0;
end;
SetColor(15);
X := N;
begin
Y := 3*Sqr(x-1)*Sqr(x-1)-3*Sqr(x-1);
if Y <= 20 THEN
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
end;
SetColor(9);
SetTextStyle(1, 0, 4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal');
SetColor(15);
SetTextStyle(1,0,4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka S.N.');
SetColor(9);
SetTextStyle(0, 0, 2);
OutTextXY( ROUND(0.4 * MX), ROUND(0.4 * MY), 'Graphik Lin. uravneniay');
While not KeyPressed do;
CloseGraph;
end.
3.4 Результаты ручного и машинного счёта:
Результаты машинного счёта соответствуют графику (см. рис.4).
3.5 Вывод:
Погрешность составляет 0%.
Рис.4
4. Программирование численного интегрирования
4.1 Составить алгоритм и программу вычисления определённого интеграла:
S = dx + , где a=5, b=10, c=15.
Число разбиения каждого интервала принять равным 10. Построить график.
4.2 Найдём интеграл методом прямоугольников1. Составим блок-схему к программе (см. рис. 5)
Блок схема к программе:
Рис.5
4.3 Программа вычисления определённого интеграла:
Program GrIntegrFun;
uses graph, crt;
var ga, gm, error,i: integer;
X,Y,Z,k,S,S1,S2,h1,h2:real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005, MSY: INTEGER;
ST:string[4];
const n=10;
b=5;
c=10;
d=15;
begin
clrscr;
GA := DETECT;
GM := DETECT;
begin
x:=b; S1:= 0;
h1:= (c-b)/n;
for i:=1 to n do
begin
S1:= S1 + (X+1)/Sqrt(x);
x:=x+h1;
end;
begin
S1:= S1*h1;
writeln('S1= ', S1:5:3);
end;
x:=c; S2:= 0;
h2:= (d-c)/n;
for i:=1 to n do
begin
S2:= S2 + 1/(1+Exp(x));
x:=x+h2;
end;
begin
S2:= S2*h2;
writeln('S2= ', S2:5:3);
end;
S:= S1 + S2;
writeln('S= ',S:5:3);
ReadKey;
KeyPressed;
end;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT;
IF ERROR <> GROK THEN
BEGIN
WRITELN('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT;
END;
MX := GetMaxX; MX03 := ROUND (0.3 * MX);
MX09 := ROUND (0.9 * MX);
MY := GetMaxY; MY09 := ROUND (0.9 * MY);
MY005 := ROUND (0.05 * MY);
SetColor(12);
Line(5, MY09, MX-10, MY09);
Line(MX03, MY005, MX03, MY-9);
Line(5, MY09, 15, MY09-3);
Line(5, MY09, 15, MY09+3);
Line(MX-20, MY09-3, MX-10, MY09);
Line(MX-20, MY09+3, MX-10, MY09);
Line(MX03, MY005, MX03-3, MY005+10);
Line(MX03, MY005, MX03+3, MY005+10);
SetTextStyle(0, 0, 2);
SetColor(14);
OutTextXY(MX03-40, MY005, 'Y');
OutTextXY(MX-40,MY09-25, 'X');
SetTextStyle(0, 0, 1);
SetColor(12);
MSY := Round(MY09/8);
Y:=-1.5;
While Y <= 7.001 do
begin
STR(Y: 4: 1, ST);
A := ROUND (MY09 - MSY * Y);
Line (MX03 + 3, A, MX03 - 3, A);
OutTextXY (MX03 - 40, A - 3, ST);
Y:= Y + 0.5;
end;
MSX := ROUND(MX09 / 21);
X := -6.0;
While X <= 15.501 do
begin
STR(X : 4 : 1, ST);
A := ROUND(MX03 + MSX * X);
Line(A, MY09 + 3, A, MY09 - 3);
OutTextXY(A, MY + 15, ST);
X := X + 1.0;
end;
SetColor(2);
X := b;
While X <= c do
begin
Y := (x+1)/Sqrt(x);
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 2);
x := x + 0.001;
IF ABS(X) < 1E-8 Then X := 0;
end;
SetColor(15);
X := b;
While X < c do
begin
Y := 0;
While Y <= Z do
begin
Z := ((x+h1)+1)/Sqrt(x+h1);
PutPixel( Round(MX03 + MSX * X),
Round(MY09 - MSY * Y), 15);
Y := Y + 0.001;
end;
X := X + H1;
end;
SetColor(15);
X := c; Y := 0;
While Y <= Z do
begin
Z := (c+1)/Sqrt(c);
PutPixel( Round(MX03 + MSX * X),
Round(MY09 - MSY * Y), 15);
Y := Y + 0.001;
end;
SetColor(15);
X := b; k := (b+h1);
While k <=c do
begin
Y := (k+1)/Sqrt(k);
While X <= k do
begin
PutPixel( Round(MX03 + MSX * X),
Round(MY09 - MSY * Y), 15);
x := x + 0.001;
end;
k := k + h1;
end;
SetColor(2);
X := c;
While X <= d do
begin
Y := 1 / ( 1 + Exp(x) );
PutPixel( Round(MX03 + MSX * X),
Round(MY09 - MSY * Y), 2);
x := x + 0.001;
If Abs(x) < 1E-8 Then X := 0;
end;
SetColor(9);
SetTextStyle(1, 0, 4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal');
SetColor(15);
SetTextStyle(1,0,4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka S.N.');
SetColor(9);
SetTextStyle(0, 0, 2);
OutTextXY( ROUND(0.5 * MX), ROUND(0.4 * MY), 'Graphik Integrala');
readkey;
KeyPressed;
CloseGraph;
end.
4.4 Результаты ручного и машинного счёта:
Ручной счёт:
Машинный счёт:
S = 15.281, что соответствует графику (см. рис.6).
4.5 Вывод:
относительная погрешность составляет 1.3%.
Рис.6
паскаль программирование функция уравнение
5. Программирование задач оптимизации
5.1 Составить алгоритм и программу для вычисления наибольшего и наименьшего значений функции y = 3(x - 1)4 - 3(x - 1)2 , на интервале [a,b] = [0;2.5] .
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;
ST:string[4];
const b=0;
c=2.5;
Label 10;
begin
GA := DETECT;
GM := DETECT;
begin
clrscr;
write('Vvedite h: h= ');
read(h);
Ymax := 3*Sqr(c-1)*Sqr(c-1)-3*Sqr(c-1);
Ymin := 3*Sqr(b-1)*Sqr(b-1)-3*Sqr(b-1);
N := b;
While N<=c do
begin
Z := 3*Sqr(N-1)*Sqr(N-1)-3*Sqr(N-1);
if Z > Ymax then Ymax := Z;
N := N + h;
end;
begin
Writeln('Ymax = ', Ymax:5:3);
end;
begin
N := c;
While N >= B do
begin
Z := 3*Sqr(N-1)*Sqr(N-1)-3*Sqr(N-1);
if Z < Ymin then Ymin := Z;
N := N - h;
end;
begin
Writeln('Ymin = ', Ymin:5:3);
end;
end;
readkey;
KeyPressed;
end;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT;
IF ERROR <> GROK THEN
BEGIN
WRITELN('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT;
END;
MX := GetMaxX; MX03 := ROUND (0.3 * MX);
MX09 := ROUND (0.9 * MX);
MY := GetMaxY; MY09 := ROUND (0.9 * MY);
MY005 := ROUND (0.05 * MY);
SetColor(12);
Line(5, MY09, MX-10, MY09);
Line(MX03, MY005, MX03, MY-9);
Line(5, MY09, 15, MY09-3);
Line(5, MY09, 15, MY09+3);
Line(MX-20, MY09-3, MX-10, MY09);
Line(MX-20, MY09+3, MX-10, MY09);
Line(MX03, MY005, MX03-3, MY005+10);
Line(MX03, MY005, MX03+3, MY005+10);
SetTextStyle(0, 0, 2);
SetColor(14);
OutTextXY(MX03-40, MY005, 'Y');
OutTextXY(MX-40,MY09-25, 'X');
SetTextStyle(0, 0, 1);
SetColor(12);
MSY := Round(MY09/23);
Y:=-2;
While Y <= 20.001 do
begin
STR(Y: 4: 1, ST);
A := ROUND (MY09 - MSY * Y);
Line (MX03 + 3, A, MX03 - 3, A);
OutTextXY (MX03 - 40, A - 3, ST);
Y:= Y +1.0;
end;
MSX := ROUND(MX09 /10);
X := -3;
While X <= 7.801 do
begin
STR(X : 4 : 1, ST);
A := ROUND(MX03 + MSX * X);
Line(A, MY09 + 3, A, MY09 - 3);
OutTextXY(A, MY + 15, ST);
X := X + 1.0;
end;
SetColor(2);
X := -6;
While X <= 21.001 do
begin
Y := 3*( Sqr(x-1) * Sqr(x-1) ) - 3*Sqr(x-1);
if Y <= 20 THEN
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 2);
x := x + 0.001;
IF ABS(X) < 1E-8 Then X := 0;
end;
SetColor(15);
x := 0.3; y:= Ymin;
begin
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
end;
SetColor(15);
x := 1.7; y:= Ymin;
begin
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
end;
SetColor(15);
x := 2.5; y:= Ymax;
begin
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
end;
SetColor(9);
SetTextStyle(1, 0, 4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal');
SetColor(15);
SetTextStyle(1,0,4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka S.N.');
SetColor(9);
SetTextStyle(0, 0, 2);
OutTextXY( ROUND(0.4 * MX), ROUND(0.4 * MY), 'Graphik Optimizacii');
While not KeyPressed do;
CloseGraph;
end.
5.4 Результаты ручного и машинного счёта:
Машинный счёт: Ymax = 8.43; Ymin = - 0.750
Машинный счёт соответствует графику (см. рис.8).
5.5 Вывод:
На графике функции видно, что Ymax = 8.43; Ymin = - 0.75, что соответствует машинному счёту.
Рис.8
6. Программирование дифференциального уравнения
6.1 Составить алгоритм и программу решения дифференциального уравнения y' = | (1-x)М(1-2x)М(1-3x) | .
6.2 Решение проводим по методу Эйлера1. Первообразную функцию в каждой точке определяем по формулам
Блок-схема к программе показана на рис.9.
Рис.9
6.3 Программа решения дифференциального уравнения:
Program GrDifFun;
uses graph, crt;
var ga, gm, error,i: integer;
X,Y,c,c0,ck,y0,h,Fc:real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005, MSY: INTEGER;
ST:string[4];
Label 5,15;
begin
clrscr;
GA := DETECT;
GM := DETECT;
begin
clrscr;
write('Vvedite c0: c0 = ');
read(c0);
write('Vvedite y0: y0 = ');
read(y0);
write('Vvedite cK: cK = ');
read(cK);
write('Vvedite h: h = ');
read(h);
C := c0;
Fc := y0;
5: Fc := Fc + h*Abs((1-c)*(1-2*c)*(1-3*c));
writeln;
writeln;
writeln('c = ',c:5:3,' ':3,'Fc = ',Fc:5:3);
c := c + h;
if c <= cK then goto 5;
readkey;
KeyPressed;
end;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT;
IF ERROR <> GROK THEN
BEGIN
WRITELN('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT; END;
MX := GetMaxX; MX03 := ROUND (0.3 * MX);
MX09 := ROUND (0.9 * MX);
MY := GetMaxY; MY09 := ROUND (0.9 * MY);
MY005 := ROUND (0.05 * MY);
SetColor(12);
Line(5, MY09, MX-10, MY09);
Line(MX03, MY005, MX03, MY-9);
Line(5, MY09, 15, MY09-3);
Line(5, MY09, 15, MY09+3);
Line(MX-20, MY09-3, MX-10, MY09);
Line(MX-20, MY09+3, MX-10, MY09);
Line(MX03, MY005, MX03-3, MY005+10);
Line(MX03, MY005, MX03+3, MY005+10);
SetTextStyle(0, 0, 2);
SetColor(14);
OutTextXY(MX03-40, MY005, 'Y');
OutTextXY(MX-40,MY09-25, 'X');
SetTextStyle(0, 0, 1);
SetColor(12);
MSY := Round(MY09/15);
Y:=-2;
While Y <= 13.001 do
begin
STR(Y: 4: 1, ST);
A := ROUND (MY09 - MSY * Y);
Line (MX03 + 3, A, MX03 - 3, A);
OutTextXY (MX03 - 40, A - 3, ST);
Y:= Y +1.0;
end;
MSX := ROUND(MX09 / 8);
X := -2.4;
While X <= 5.801 do
begin
STR(X : 4 : 1, ST);
A := ROUND(MX03 + MSX * X);
Line(A, MY09 + 3, A, MY09 - 3);
OutTextXY(A, MY + 15, ST);
X := X + 0.2;
end;
SetColor(2);
X := -6;
While X <= 1.8 do
begin
Y := Abs((1-X)*(1-2*X)*(1-3*X));
if Y<=13 then
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 2);
x := x + 0.001;
IF ABS(X) < 1E-8 Then X := 0;
end;
SetColor(15);
X := c0; Y := y0;
While x <= ck do
begin
Y := Y + h*Abs((1-x)*(1-2*x)*(1-3*x));
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
x := x + h;
end;
SetColor(9);
SetTextStyle(1, 0, 4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal');
SetColor(15);
SetTextStyle(1,0,4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka S.N.');
SetColor(9);
SetTextStyle(0, 0, 2);
OutTextXY( ROUND(0.4 * MX), ROUND(0.4 * MY), 'Graphik Dif. ravneniay');
While not KeyPressed do;
CloseGraph;
end.
6.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).
6.5 Вывод: относительная погрешность составляет 0%.
Рис.10
7. Программирование аппроксимации
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.
7.2 Метод решения
Решать будем методом наименьших квадратов1:
Составим блок-схему к программе (см. рис. 11).
Рис.11
Где К1 = , К2 = , L1 = , L2 = .
7.3 Программа вычисления функции:
Program GrAproksFun;
uses graph, crt;
const n=14;
var ga, gm, error,i: integer;
X,Y,K1,K2,L1,L2,A0,A1:real;
Z,W:Array[1..n] of real;
A, MX, MX03, MX09, MSX,
MY, MY09, MY005, MSY: INTEGER;
ST:string[4];
begin
GA := DETECT;
GM := DETECT;
begin
clrscr;
for i:= 1 to n do
begin
write('Vvedite X[',i,']= ');
read(Z[i]);
end;
for i:=1 to n do
begin
write('Vvedite Y[',i,']= ');
read(W[i]);
end;
K1:=0; K2:=0;
L1:=0; L2:=0;
for i:=1 to n do
begin
K1:=K1+Z[i];
K2:=K2+Z[i]*Z[i];
L1:=L1+W[i];
L2:=L2+W[i]*Z[i];
end;
A0:=(L2*K1-L1*K2)/(K1*K1-n*K2);
A1:=(K1*L1-n*L2)/(K1*K1-n*K2);
writeln;
writeln('A0= ',A0:4:2, ' A1= ',A1:4:2);
ReadKey;
KeyPressed;
end;
INITGRAPH(GA, GM, 'C:\TP7\BGI');
ERROR := GRAPHRESULT;
IF ERROR <> GROK THEN
BEGIN
WRITELN('OSHIBKA!!!', #10#13,GRAPHERRORMSG(ERROR) ); HALT;
END;
MX := GetMaxX; MX03 := ROUND (0.3 * MX);
MX09 := ROUND (0.9 * MX);
MY := GetMaxY; MY09 := ROUND (0.7 * MY);
MY005 := ROUND (0.03 * MY);
SetColor(12);
Line(5, MY09, MX-10, MY09);
Line(MX03, MY005, MX03, MY-9);
Line(5, MY09, 15, MY09-3);
Line(5, MY09, 15, MY09+3);
Line(MX-20, MY09-3, MX-10, MY09);
Line(MX-20, MY09+3, MX-10, MY09);
Line(MX03, MY005, MX03-3, MY005+10);
Line(MX03, MY005, MX03+3, MY005+10);
SetTextStyle(0, 0, 2);
SetColor(14);
OutTextXY(MX03-40, MY005, 'Y');
OutTextXY(MX-40,MY09-25, 'X');
SetTextStyle(0, 0, 1);
SetColor(12);
MSY := Round(MY09/5);
Y := -2;
While Y <= 4.501 do
begin
STR(Y: 4: 1, ST);
A := ROUND (MY09 - MSY * Y);
Line (MX03 + 3, A, MX03 - 3, A);
OutTextXY (MX03 - 40, A - 3, ST);
Y:= Y +0.5;
end;
MSX := ROUND(MX09 / 2);
X := -6;
While X <= 1.401 do
begin
STR(X : 4 : 1, ST);
A := ROUND(MX03 + MSX * X);
Line(A, MY09 + 3, A, MY09 - 3);
OutTextXY(A, MY + 15, ST);
X := X + 0.1;
end;
SetColor(2);
X := -0.6;
While X <= 1.4 do
begin
Y := A0*X + A1;
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 2);
x := x + 0.001;
IF ABS(X) < 1E-8 Then X := 0;
end;
SetColor(15);
X := Z[1]; Y := W[1];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[2]; Y := W[2];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[3]; Y := W[3];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[4]; Y := W[4];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[5]; Y := W[5];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[6]; Y := W[6];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[7]; Y := W[7];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[8]; Y := W[8];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[9]; Y := W[9];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[10]; Y := W[10];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[11]; Y := W[11];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[12]; Y := W[12];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[13]; Y := W[13];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(15);
X := Z[14]; Y := W[14];
PutPixel( ROUND(MX03 + MSX * X),
ROUND(MY09 - MSY * Y), 15);
SetColor(9);
SetTextStyle(1, 0, 4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.1 * MY),
'Grafic in Turbo Pascal');
SetColor(15);
SetTextStyle(1,0,4);
OutTextXY( ROUND(0.4 * MX), ROUND(0.2 * MY),
'Proect: Osadchuka S.N.');
SetColor(9);
SetTextStyle(0, 0, 2);
OutTextXY( ROUND(0.5 * MX), ROUND(0.4 * MY), 'Graphik Aproksimacii');
While not KeyPressed do;
CloseGraph;
End.
7.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.
7.5 Вывод по работе
Сравнивая значения машинного и ручного счёта, мы видим точное совпадение чисел.
Рис.12
Заключение
В широком смысле под информатикой понимается фундаментальная естественная наука, изучающая процессы сбора, накопления, передачи и обработки информации. В конкретном случае информатика предназначена для автоматизации решения многих инженерных проектных и расчетных задач. Она является одной из базовых дисциплин, необходимых для изучения дисциплины «САПР технологических процессов, инструментов и станков». В ней рассматриваются принципы разработки математических моделей (в том числе трудно формализуемых задач), алгоритмов и программ, а также вопросы построения некоторых вычислительных систем.
Список использованной литературы
1. Карев Е.А. Информатика: Учебное пособие. - Ульяновск: УлГТУ, 2006. - 104с.
2. Карев Е.А. Технологическая информатика. - Ульяновск: УлГТУ, 2006. - 52 с.
3. Климова Л.М. Практическое программирование. Решение типовых задач. - Москва, 2008. - 526с.
Размещено на Allbest.ru
Подобные документы
Логические конструкции в системе программирования Паскаль. Команды языка программирования, использование функций, процедур. Постановка и решение задач механики в среде системы Паскаль. Задачи статики, кинематики, динамики решаемые с помощью языка Паскаль.
курсовая работа [290,9 K], добавлен 05.12.2008Использование нестандартных функций и подпрограмм (процедур) для составления алгоритмов вычислений. Программы для вычисления значение корней нелинейного уравнения по методу половинного деления. Составление алгоритма операций над матрицами и интегралами.
курсовая работа [580,0 K], добавлен 23.08.2015Принципы разработки математических моделей, алгоритмов и программ. Составление программы вычисления функции с использованием нестандартных функций. Нахождение значения корней нелинейного уравнения по методу касательных. Программа для вычисления интеграла.
курсовая работа [568,3 K], добавлен 07.03.2015Разработка с использованием приложения Mathcad алгоритма и программы решения нелинейного уравнения методами касательных, половинного деления и хорд. Решение с помощью ее заданных нелинейных уравнений. Создание графической иллюстрации полученных решений.
курсовая работа [665,7 K], добавлен 22.08.2013Основные сведения о системе программирования Турбо Паскаль. Структура программы на Паскале и ее компоненты. Особенности и элементы языка Турбо Паскаль. Порядок выполнения операций в арифметическом выражении, стандартные функции и оператор присваивания.
лекция [55,7 K], добавлен 21.05.2009Математическое описание, алгоритм и программа вычисления нелинейного уравнения методом дихотомии. Метод половинного деления. Метод поиска корней функции. Написание текста программы с комментариями. Проведение тестовых расчетов. Вывод ответа на экран.
курсовая работа [67,2 K], добавлен 15.02.2016Метод численного интегрирования. Использование метода половинного деления для решения нелинейного уравнения. Определение отрезка неопределенности для метода половинного деления. Получение формулы Симпсона. Уменьшение шага интегрирования и погрешности.
курсовая работа [3,0 M], добавлен 21.05.2013Методика реализации решения нелинейного уравнения в виде процедуры-подпрограммы следующими методами: хорд, касательных (Ньютона), простой итерации, половинного деления. Основные методы уточнения корней уравнения. Программное решение задачи, алгоритм.
курсовая работа [4,0 M], добавлен 27.03.2011Структура языка Паскаль, встроенные процедуры и функции. Составление алгоритма решения уравнения, описывающего работу кривошипно-шатунного механизма, с помошью метода итерации, метода Гаусса и метода Зейделя. Блок-схемы алгоритмов и текст программы.
курсовая работа [64,6 K], добавлен 07.05.2011Создание приложения, исполняющего трансляцию программы из языка Паскаль в язык Си: разработка алгоритма реализации задачи, описание необходимых констант, переменных, функций и операторов, представление листинга программы и распечатка результатов.
курсовая работа [305,9 K], добавлен 03.07.2011