begin SetWindowSize(w,h); // поле для графика в окне var xLeft:=50; var yLeft:=50; var xRight:=w-xLeft; var yRight:=h-yLeft; // интервалы по осям var ax:=-12.0; var bx:=12.0; var hx:=1.0; var ay:=-6.5; // минимум f(x) с запасом var by:=6.5; var hy:=0.5; // масштабы по осям var mx:=(xRight-xLeft)/(bx-ax); var my:=(yRight-yLeft)/(by-ay); // точка начала координат графика var x0:=xLeft+Trunc(abs(ax)*mx); var y0:=yRight-Trunc(abs(ay)*my); // рисование координатных осей Line(xLeft,y0,xRight+10,y0); Line(x0,yLeft-10,x0,yRight); SetFontSize(12); SetFontColor(clBlue); TextOut(xRight+15,y0-10,'X'); TextOut(x0-4,yLeft-30,'Y'); SetFontSize(8); SetFontColor(clGreen); // рисование засечек var s:string; for var i:=1 to Round((bx-ax)/hx)+1 do begin var num:=ax+(i-1)*hx; var x:=xLeft+Trunc(mx*(num-ax)); Line(x,y0-3,x,y0+3); Str(num,s); if abs(num)>1E-15 then TextOut(x-TextWidth(s) div 2,y0+10,s) end; for var i:=1 to Round((by-ay)/hy)+1 do begin var num:=ay+(i-1)*hy; var y:=yRight-Trunc(my*(num-ay)); Line(x0-3,y,x0+3,y); Str(num,s); if abs(num)>1E-15 then TextOut(x0+7,y-TextHeight(s) div 2,s) end; TextOut(x0-10,y0+10,'0'); // собственно график var xi:=ax; while xi<=bx do begin var yi:=f(xi); var x:=x0+Round(xi*mx); var y:=y0-Round(yi*my); if (y>=yLeft) and (y<=yRight) then SetPixel(x,y,clRed); xi+=1e-3 end end.
begin SetWindowSize(w,h); // поле для графика в окне var xLeft:=50; var yLeft:=50; var xRight:=w-xLeft; var yRight:=h-yLeft; // интервалы по осям var ax:=-15.0; var bx:=15.0; var hx:=1.0; var ay:=-6.5; // минимум f(x) с запасом var by:=6.5; var hy:=0.5; // масштабы по осям var mx:=(xRight-xLeft)/(bx-ax); var my:=(yRight-yLeft)/(by-ay); // точка начала координат графика var x0:=xLeft+Trunc(abs(ax)*mx); var y0:=yRight-Trunc(abs(ay)*my); // рисование координатных осей Line(xLeft,y0,xRight+10,y0); Line(x0,yLeft-10,x0,yRight); SetFontSize(12); SetFontColor(clBlue); TextOut(xRight+15,y0-10,'X'); TextOut(x0-4,yLeft-30,'Y'); SetFontSize(8); SetFontColor(clGreen); // рисование засечек var s:string; for var i:=1 to Round((bx-ax)/hx)+1 do begin var num:=ax+(i-1)*hx; var x:=xLeft+Trunc(mx*(num-ax)); Line(x,y0-3,x,y0+3); Str(num,s); if abs(num)>1E-15 then TextOut(x-TextWidth(s) div 2,y0+10,s) end; for var i:=1 to Round((by-ay)/hy)+1 do begin var num:=ay+(i-1)*hy; var y:=yRight-Trunc(my*(num-ay)); Line(x0-3,y,x0+3,y); Str(num,s); if abs(num)>1E-15 then TextOut(x0+7,y-TextHeight(s) div 2,s) end; TextOut(x0-10,y0+10,'0'); // собственно график var xi:=ax; while xi<=bx do begin var yi:=f(xi); var x:=x0+Round(xi*mx); var y:=y0-Round(yi*my); if (y>=yLeft) and (y<=yRight) then SetPixel(x,y,clRed); xi+=1e-3 end end.
Понятие двумерного массива. Описание типа массива. Формирование значений элементов массива случайным образом
Одним из основных направлений использования компьютеров является накопление и обработка данных - различных таблиц, справочников, словарей и другой информации. Для представления такой информации в программе удобно использовать массивы. Как правило, обработка таких данных осуществляется по одному и тому же закону, для чего удобно использовать циклические алгоритмы.
Мы уже рассматривали формирование и обработку одномерных массивов. Вспомним, что в массив мы объединяем конечную последовательность компонентов одного типа и даем им общее имя. Каждый отдельный компонент массива называется элементом. Количество элементов называется размером массива. Тип элементов определяет тип массива. Размер и тип массива указываются при его описании, причем размер может быть указан либо конкретным значением, либо ранее определенной константой. Номер элемента называется индексом. Индексы могут быть целыми положительными константами или целыми переменными. Чтобы обратиться к некоторому элементу массива, нужно рядом с идентификатором массива в скобках указать индекс элемента.
Но часто данные могут быть организованы в виде таблицы (матрицы), где расположение каждой переменной определяется номером строки и номером столбца. Например, место в зрительном зале задается указанием номера ряда и номером места в этом ряду. Такие данные удобно описать как двумерный массив. В отличие от одномерного массива каждому элементу двумерного массива соответствует пара индексов. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент массива.
Размер двумерного массива задается парой чисел: M*N, где M - число строк, а N - число столбцов в таблице.
Пусть задан двумерный массив Matr, имеющий размер 10*20. Этот массив на языке Паскаль может быть описан следующим образом:
// PascalABC.NET 3.1, сборка 1204 от 24.03.2016
uses graphABC;
const
w=1000;
h=600;
function f(x:real):=0.5*x*cos(2*x);
begin
SetWindowSize(w,h);
// поле для графика в окне
var xLeft:=50;
var yLeft:=50;
var xRight:=w-xLeft;
var yRight:=h-yLeft;
// интервалы по осям
var ax:=-12.0;
var bx:=12.0;
var hx:=1.0;
var ay:=-6.5; // минимум f(x) с запасом
var by:=6.5;
var hy:=0.5;
// масштабы по осям
var mx:=(xRight-xLeft)/(bx-ax);
var my:=(yRight-yLeft)/(by-ay);
// точка начала координат графика
var x0:=xLeft+Trunc(abs(ax)*mx);
var y0:=yRight-Trunc(abs(ay)*my);
// рисование координатных осей
Line(xLeft,y0,xRight+10,y0);
Line(x0,yLeft-10,x0,yRight);
SetFontSize(12); SetFontColor(clBlue);
TextOut(xRight+15,y0-10,'X');
TextOut(x0-4,yLeft-30,'Y');
SetFontSize(8); SetFontColor(clGreen);
// рисование засечек
var s:string;
for var i:=1 to Round((bx-ax)/hx)+1 do begin
var num:=ax+(i-1)*hx;
var x:=xLeft+Trunc(mx*(num-ax));
Line(x,y0-3,x,y0+3);
Str(num,s);
if abs(num)>1E-15 then TextOut(x-TextWidth(s) div 2,y0+10,s)
end;
for var i:=1 to Round((by-ay)/hy)+1 do begin
var num:=ay+(i-1)*hy;
var y:=yRight-Trunc(my*(num-ay));
Line(x0-3,y,x0+3,y);
Str(num,s);
if abs(num)>1E-15 then TextOut(x0+7,y-TextHeight(s) div 2,s)
end;
TextOut(x0-10,y0+10,'0');
// собственно график
var xi:=ax;
while xi<=bx do begin
var yi:=f(xi);
var x:=x0+Round(xi*mx);
var y:=y0-Round(yi*my);
if (y>=yLeft) and (y<=yRight) then SetPixel(x,y,clRed);
xi+=1e-3
end
end.
*******************************************
// PascalABC.NET 3.1, сборка 1204 от 24.03.2016
uses graphABC;
const
w=1000;
h=600;
function f(x:real):=8*sin(x)*sin(2*x);
begin
SetWindowSize(w,h);
// поле для графика в окне
var xLeft:=50;
var yLeft:=50;
var xRight:=w-xLeft;
var yRight:=h-yLeft;
// интервалы по осям
var ax:=-15.0;
var bx:=15.0;
var hx:=1.0;
var ay:=-6.5; // минимум f(x) с запасом
var by:=6.5;
var hy:=0.5;
// масштабы по осям
var mx:=(xRight-xLeft)/(bx-ax);
var my:=(yRight-yLeft)/(by-ay);
// точка начала координат графика
var x0:=xLeft+Trunc(abs(ax)*mx);
var y0:=yRight-Trunc(abs(ay)*my);
// рисование координатных осей
Line(xLeft,y0,xRight+10,y0);
Line(x0,yLeft-10,x0,yRight);
SetFontSize(12); SetFontColor(clBlue);
TextOut(xRight+15,y0-10,'X');
TextOut(x0-4,yLeft-30,'Y');
SetFontSize(8); SetFontColor(clGreen);
// рисование засечек
var s:string;
for var i:=1 to Round((bx-ax)/hx)+1 do begin
var num:=ax+(i-1)*hx;
var x:=xLeft+Trunc(mx*(num-ax));
Line(x,y0-3,x,y0+3);
Str(num,s);
if abs(num)>1E-15 then TextOut(x-TextWidth(s) div 2,y0+10,s)
end;
for var i:=1 to Round((by-ay)/hy)+1 do begin
var num:=ay+(i-1)*hy;
var y:=yRight-Trunc(my*(num-ay));
Line(x0-3,y,x0+3,y);
Str(num,s);
if abs(num)>1E-15 then TextOut(x0+7,y-TextHeight(s) div 2,s)
end;
TextOut(x0-10,y0+10,'0');
// собственно график
var xi:=ax;
while xi<=bx do begin
var yi:=f(xi);
var x:=x0+Round(xi*mx);
var y:=y0-Round(yi*my);
if (y>=yLeft) and (y<=yRight) then SetPixel(x,y,clRed);
xi+=1e-3
end
end.
Теоретический материал (Паскаль)
Понятие двумерного массива. Описание типа массива. Формирование значений элементов массива случайным образом
Одним из основных направлений использования компьютеров является накопление и обработка данных - различных таблиц, справочников, словарей и другой информации. Для представления такой информации в программе удобно использовать массивы. Как правило, обработка таких данных осуществляется по одному и тому же закону, для чего удобно использовать циклические алгоритмы.
Мы уже рассматривали формирование и обработку одномерных массивов. Вспомним, что в массив мы объединяем конечную последовательность компонентов одного типа и даем им общее имя. Каждый отдельный компонент массива называется элементом. Количество элементов называется размером массива. Тип элементов определяет тип массива. Размер и тип массива указываются при его описании, причем размер может быть указан либо конкретным значением, либо ранее определенной константой. Номер элемента называется индексом. Индексы могут быть целыми положительными константами или целыми переменными. Чтобы обратиться к некоторому элементу массива, нужно рядом с идентификатором массива в скобках указать индекс элемента.
Но часто данные могут быть организованы в виде таблицы (матрицы), где расположение каждой переменной определяется номером строки и номером столбца. Например, место в зрительном зале задается указанием номера ряда и номером места в этом ряду. Такие данные удобно описать как двумерный массив. В отличие от одномерного массива каждому элементу двумерного массива соответствует пара индексов. Первый индекс - это номер строки, а второй - номер столбца, где расположен элемент массива.
Размер двумерного массива задается парой чисел: M*N, где M - число строк, а N - число столбцов в таблице.
Пусть задан двумерный массив Matr, имеющий размер 10*20. Этот массив на языке Паскаль может быть описан следующим образом:
Var
Matr : array [1..10,1..20] of integer;