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

Программирование нестандартных функций, задач оптимизации, дифференциального уравнения и аппроксимации с помощью языка Паскаль. Алгоритм и программа операций над матрицами. Нахождение значения корней нелинейного уравнения по методу половинного деления.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 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

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.