Основные задачи программирования с помощью языка Паскаль

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

Введение

Известно, что технический уровень, а, следовательно, и конкурентоспособность выпускаемой машиностроительными предприятиями продукции в большой степени зависят от качества проектных решений на стадии технологической подготовки производства. В процессе технологической подготовки производства инженерам приходится сталкиваться со сложными задачами расчетного и проектного характера, решение которых во многих случаях с помощью традиционных методов либо практически не возможно, либо занимает много времени. В связи с усложнением конструкций изделий и увеличением их номенклатуры для решения возникающих задач потребуется множество новых проектировщиков, что привело бы в свою очередь к большим затратам. В связи с этим весьма актуальна автоматизация технологической подготовки производства, которая имеет следующие особенности: использование принципиально новых методологических основ проектирования; широкое применение экономико-математических методов проектирования; всесторонняя автоматизация инженерного труда. С появлением ЭВМ возможность автоматизации технологической подготовки производства стала реальностью. Появилось много систем автоматизированного проектирования (САПР), управления производством, управления технологическими процессами и др. Возникли новые методы решения таких задач (в отличие от традиционных), которые рассматриваются в курсе информатики.

В качестве примеров рассмотрим основные задачи программирования с помощью языка Паскаль.

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: TP7BGI');

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: TP7BGI');

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: TP7BGI');

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: TP7BGI');

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: TP7BGI');

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: TP7BGI');

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с.

ПоказатьСвернуть
Заполнить форму текущей работой