Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ОТЧЕТ ПО РГР(ШАФЕЕВА).docx
Скачиваний:
5
Добавлен:
15.07.2019
Размер:
168.12 Кб
Скачать

Государственное образовательное учреждение

высшего профессионального образования

«Омский государственный технический университет»

Кафедра «Автоматизированные системы обработки информации и управления»

ПОЯСНИТЕЛЬНАЯ ЗАПИСКА

К РАСЧЕТНО ГРАФИЧЕСКОАЯ РАБОТЕ

По дисциплине «Программирование на языках высокого уровня»

ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ С ЗАДАННЫМ ЧИСЛОМ ПОВТОРЕНИЙ

Преподаватель подпись, дата О.П. Шафеева

Студент подпись, дата З. Д. Шопарева

Омск 2011

Содержани

1 Задание 3

2 Теоритический анализ 4

2.1 Графики функций 4

2.1 Решение уравнения 4

3 Схемы алгоритмов 6

4 Текст программы 8

5 Результаты работы программы 11

6 Построение графика 15

1 Задание 4

2 Теоритический анализ 5

2.1 Графики функций 5

2.1 Решение уравнения 5

3 Схемы алгоритмов 7

4 Текст программы 9

5 Результаты работы программы 12

6 Построение графика 16

1 Задание

  1. Вычислить значение функции . Построить график на интервале[1;5] , используя 18 опорных точек.

  2. Вычислить значение функции . Построить график на интервале[1;5] , используя 18 опорных точек.

  3. Вычислить корни уравнения: используя метод половинного деления.

2 Теоритический анализ

2.1 Графики функций

Для построения ее графика используются опорные точки на координатных осях.

Данн отрезок [1;5] и 18 опорных точек, по ним строятся графики двух функций приведенных выше. Для вычисления значения dx нужно воспользоваться формулой:

dx=(b-a)/(n-1),

где a и b – крайние границы диапазона.

При вычислении промежуточных значений абсцисс x применим формулу:

x i = x i-1 + dx,

где x i - значение абсциссы предыдущей точки.

Для изучения значения функции (ординат точек) нужно подставить текущие значения абсцисс в уравнение функции.

2.1 Решение уравнения

При решении уравнения методом половинного деления, выделяются границы, в которых находится наш корень. Границы берутся либо очевидно включающие корень (большие значения), либо графически, найдя область пересечения графика функции с осью координат x.

После нахождения граничных значений, начинается алгоритм поиска корня. Имеются 3 переменные :

  • a – нижняя граница интервала;

  • b – верхняя граница интервала;

  • cточка по середине межу a и b

Если в интервале [a;b] график функции пересекает ось х один раз, то гарантированно можно сказать, что значения функции в точках a и b будут различаться знаком.

В зависимости от значения функции в точке c можно сокращать интервал поиска.

Если c и a одного знака, то можно сократить интервал со стороны границы a до значения c. Если c и b одного знака, то можно сократить интервал со стороны границы b до значения c.

Таким образом с каждым шагом, ширина интервала будет сокращаться вдвое, сохраняя в себе корень уравнения. Как только размер интервала станет меньше допустимой погрешности, можно закончить алгоритм и значение c будет максимально близким к корню уравнения.

3 Схемы алгоритмов

Рисунок 1 – общая схема алгоритма.

Рисунок 1 - Схемы решения уравнения и построения графиков

4 Текст программы

Program RGR;

Uses Graph,Crt, math;

Var grDriver,grMode,q:integer;

ch :char;

Procedure init;

Var x:integer;

begin

grDriver:=detect;

InitGraph(grDriver,grMode,'');

end;

Procedure drawmenu;

begin

setcolor(4);

textcolor(9);

writeln(' ђЂ‘—…’ЌЋ ѓђЂ”€—…‘ЉЂџ ђЂЃЋ’Ђ');

writeln(' ‘в㤥­в:˜®Ї аҐў  ‡®п ');

writeln(' ѓагЇЇ  Ђ‘-111 ');

textcolor(9);

writeln('ЊҐ­о');

writeln('1: ‡ бв ўЄ ');

writeln('2: “а ў­Ґ­ЁҐ');

writeln('3: ѓа дЁЄ 1');

writeln('4: ѓа дЁЄ 2');

writeln('5: Ћ Їа®Ја ¬¬Ґ');

writeln('6: ‚л室');

end;

Procedure Graph1;

Var a,b,x,dx,fx:real;

i:integer;

S:string;

masx: Array[1..18] of real;

masy: Array[1..18] of real;

begin

{initialization}

init;

ClearDevice;

a:=1;

b:=3;

dx:=(b-a)/18;

x:=1;

for i:=1 to 18 do

begin

masy[i]:=ArcTan(x)*1.5;

masx[i]:=x;

x:=x+dx;

str(masx[i]:2:2,S);

outtextxy(10,10*i+20,S);

str(masy[i]:2:2,S);

outtextxy(60,10*i+20,S);

end;

a:=masy[1];

b:=1;

for i:=1 to 18 do

begin

if a<masy[i] then

begin

a:=masy[i];

b:=i;

end;

end;

outtextxy(10,10,' x y');

setcolor(4);

str(a:2:2,S);

outtextxy(60,trunc(10*b)+20,S);

setcolor(5);

a:=200;

b:=120;

x:=18;

for i:=1 to 17 do

line(trunc(a+masx[i]*x),

trunc(b-masy[i]*x),

trunc(a+masx[i+1]*x),

trunc(b-masy[i+1]*x));

setcolor(3);

line(trunc(a), trunc(b), trunc(a+100), trunc(b));

line(trunc(a), trunc(b), trunc(a-100), trunc(b));

line(trunc(a), trunc(b), trunc(a), trunc(b-100));

line(trunc(a), trunc(b), trunc(a), trunc(b+100));

setcolor(5);

outtextxy(10,250,'Nazhmite lubyiy klavishy dlya vihoda v menu');

repeat until keypressed;

cleardevice;

closegraph;

end;

Procedure Graph2;

Var a,b,x,dx,fx:real;

i:integer;

S:string;

masx: Array[1..18] of real;

masy: Array[1..18] of real;

begin

{initialization}

init;

ClearDevice;

a:=1;

b:=3;

dx:=(b-a)/18;

x:=1;

for i:=1 to 18 do

begin

masy[i]:=power((x-1),3);

masx[i]:=x;

x:=x+dx;

str(masx[i]:2:2,S);

outtextxy(10,10*i+20,S);

str(masy[i]:2:2,S);

outtextxy(60,10*i+20,S);

end;

outtextxy(10,10,' x y');

a:=masy[1];

b:=1;

for i:=1 to 18 do

begin

if a<masy[i] then

begin

a:=masy[i];

b:=i;

end;

end;

outtextxy(10,10,' x y');

setcolor(4);

str(a:2:2,S);

outtextxy(60,trunc(10*b)+20,S);

setcolor(5);

a:=200;

b:=120;

x:=18;

for i:=1 to 17 do line(trunc(a+masx[i]*x),

trunc(b-masy[i]*x),

trunc(a+masx[i+1]*x),

trunc(b-masy[i+1]*x));

setcolor(3);

line(trunc(a), trunc(b), trunc(a+100), trunc(b));

line(trunc(a), trunc(b), trunc(a-100), trunc(b));

line(trunc(a), trunc(b), trunc(a), trunc(b-100));

line(trunc(a), trunc(b), trunc(a), trunc(b+100));

setcolor(5);

outtextxy(10,250,'Nazhmite lubyiy klavishy dlya vihoda v menu');

repeat until keypressed;

cleardevice;

closegraph;

end;

Procedure Korni;

Var x,i:integer;

a,b,c,dx,fa,fc:real;

S:string;

begin

init;

ClearDevice;

setcolor(5);

a:=-100;

b:=99;

c:=(a+b)/2;

repeat

fa:=a*a*a+3*a+2;

fc:=c*c*c+3*c+2;

if (fa*fc<0) then b:=c

else a:=c;

dx:=b-a;

c:=(a+b)/2;

until dx<0.00001;

outtextxy(10,10,'Yravnenie: x^3+3*x+2=0');

str(c:2:2,S);

outtextxy(10,20,'Koren: x = '+S) ;

repeat until keypressed;

cleardevice;

closegraph;

end;

Procedure Zastavka;

Var r,x,y, i, color :integer;

begin

init;

cleardevice;

repeat

color:=random(14)+1;

r:=random(100)+10;

x:=random(1024);

y:=random(768);

For i:=1 TO 20

Do

Begin

r:=r+5*i;

setcolor(color);

circle(x,y,r);

setcolor(0);

circle(x,y,r);

Delay(50);

End;

until keypressed;

cleardevice;

closegraph;

end;

Procedure About;

Var x1 :integer;

begin

init;

cleardevice;

settextstyle(3,0,2);

outtextxy(200,100,'Raschetno graficheskaya rabota');

outtextxy(220,120,'Programmirovanie na yazike: PASCAL');

outtextxy(230,140,'Vipolnil stydent: Shopareva Zoya ');

outtextxy(240,160,'Gryppa AS-111.Kafedra: ASOIY');

outtextxy(230,180,'Prinemal prepodavatel:');

outtextxy(220,200,'Shafeeva Olga Pavlovna');

outtextxy(200,220,'Fakyltet:FITiKS');

repeat until keypressed;

cleardevice;

closegraph;

end;

Begin

Repeat

clrscr;

drawmenu;

writeln;

textcolor(9);

writeln('‚лЎҐаЁвҐ ­г¦­л© Їг­Є ¤«п Їа®¤®«¦Ґ­Ёп а Ў®вл');

ch:=readkey;

if (ch='1') then Zastavka;

if (ch='2') then Korni;

if (ch='3') then Graph1;

if (ch='4') then Graph2;

if (ch='5') then About;

if (ch='6') then exit;

repeat until keypressed;

Until 2<1;

end.