Государственное образовательное учреждение
высшего профессионального образования
«Омский государственный технический университет»
Кафедра «Автоматизированные системы обработки информации и управления»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К РАСЧЕТНО ГРАФИЧЕСКОАЯ РАБОТЕ
По дисциплине «Программирование на языках высокого уровня»
ПРОГРАММИРОВАНИЕ ЦИКЛИЧЕСКИХ АЛГОРИТМОВ С ЗАДАННЫМ ЧИСЛОМ ПОВТОРЕНИЙ
Преподаватель подпись, дата О.П. Шафеева
Студент подпись, дата З. Д. Шопарева
Омск 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;5] , используя 18 опорных точек.
Вычислить значение функции . Построить график на интервале[1;5] , используя 18 опорных точек.
Вычислить корни уравнения: используя метод половинного деления.
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.