
- •4.5 Контрольные вопросы
- •5.Алгоритмы повторений
- •5.1 Цель работы
- •5.2 Задание
- •5.3 Теоретические сведения Операторы повторений
- •Счётный оператор цикла For
- •Оператор цикла с предусловием While .. Do
- •О ператор цикла с постусловием Repeat .. Until
- •Массивы
- •Одномерные массивы
- •Операции с массивами
- •Пример 1. Формирование массива
- •Пример 2. Формирование массива значений функции
- •Открытые параметры-массивы процедур
- •Пример 3. Открытые параметры
- •Динамические массивы
- •Пример 4. Динамические массивы
- •Содержание отчета
- •Контрольные вопросы
Операции с массивами
Следует различать операции с отдельными элементами массива и с массивом в целом.
С элементами массива можно производить все без исключения операции, допустимые для указанного типа.
Операции с массивами в целом возможны только для массивов одного типа. Например, операции присваивания значений одного массива другому.
type Vector = array [0..9] of Integer;
var Mv1: Vector;
Mv2: Vector; // 2 массива одного типа
…………………..
Mv1 := Mv2; {Элементы массива Mv1 получат значения элементов
массива Mv2}
В следующем примере массивы А и В описаны раздельно, компилятор относит их к разным типам, хотя и выглядят они одинаково.
var A: array [1..5] of Integer;
B: array [1..5] of Integer;
Операция A := B – в этом случае ошибочная, присваивание следует выполнять поэлементно.
for i:=1 to 5 do //i –счётчик, переменная целого типа
A[i] := B[i];
Над массивами не определены операции отношения. Нельзя, например, записать Mv1 = Mv2. Сравнить два массива можно только поэлементно.
Пример 1. Формирование массива
Дано: начальное значение X0, введённое в LabeledEdit1.Text;
приращение dX, введённое в LabeledEdit2.Text.
Требуется: разработать процедуру формирования 10-и элементов массива Mx, начиная с X0 и приращением dX.
implementation
const m=10; //кол-во элементов массива
type T_Mxy = array [1..m] of Real; //тип массива
var Mx: T_Mxy; //переменная массив
procedure Cr_Mx(Str_X, Str_d : string; Var MM: T_Mxy);
{Процедура Cr_Mx формирует массив ММ. ММ будет передан из процедуры для использования в других процедурах - поэтому ММ параметр-переменная. Str_X – строка, содержащая значение Х0. Str_d - строка, содержащая значение dX.}
var i: Byte; //счётчик цикла
dX: Real; //приращение dХ
begin
MM[1] :=StrToFloat(Str_X); //Преобразование Str_X в элемент MM[1] массива
dX := StrToFloat(Str_d); //преобразование Str_d в число dX
for i :=2 to m do
MM[i]:= MM[i-1]+dX; //цикл формирования массива
end;
{Вызов процедуры формирования массива можно связать с событием нажатия кнопки. Контроль алфавита вводимых данных в тексте программы опущен.}
procedure TForm1.Button1Click(Sender: TObject);
begin
if LabeledEdit1.Text = ‘’ //проверка поля X0 на пустое значение
then begin
ShowMessage('Введите X0! ');
exit //досрочное завершение процедуры
end;
if LabeledEdit2.Text='' // проверка поля dX на пустое значение
then begin
ShowMessage('Введите dX! ');
exit //досрочное завершение процедуры
end;
Cr_Mx(LabeledEdit1.Text, LabeledEdit2.Text, Mx); //массив Mx сформирован
……………………………..
end;
Пример 2. Формирование массива значений функции
Дано: массив Mx и процедура формирования массива Cr_Mx(Str_X, Str_d : string; Var MM: T_Mxy) (см. пример 1.);
функция FXn(X, n: Real): Real возведения X в степень n (см. работу 4), значение n введено в LabeledEdit3.Text;
метка Label3 для вывода значений массивов.
Требуется: разработать процедуру формирования массива My по значениям функции FXn(X, n ) при условии, что X принимает значения элементов массива Mx; вывести результат в виде:
i_элемент Mxi Myi
implementation //добавленный текст выделен курсивом
const m=10; //кол-во элементов массива
type T_Mxy = array [1..m] of Real; //тип массива
var Mx, My: T_Mxy; //переменные - массивы
n: Real; //показатель степени
procedure Cr_Mx(Str_X, Str_d : string; Var MM: T_Mxy);
{Процедура Cr_Mx формирует массив ММ. ММ будет передан из процедуры для использования в других процедурах - поэтому ММ параметр-переменная. Str_X – строка, содержащая значение Х0. Str_d - строка, содержащая значение dX.}
var i: Byte; //счётчик цикла
dX: Real; //приращение dХ
begin
MM[1] :=StrToFloat(Str_X); //Преобразование Str_X в элемент MM[1] массива
dX := StrToFloat(Str_d); //преобразование Str_d в число dX
for i :=2 to m do
MM[i]:= MM[i-1]+dX; //цикл формирования массива
end;
procedure Cr_My(Mx: T_Mxy; var My: T_Mxy; n: real );
{Формирует массив My по значениям функции FXn(Mx[i], n). Мy будет передан из процедуры для использования в других процедурах - поэтому Мy параметр-переменная. n – показатель степени.}
var i: byte; //счётчик
begin
for i:= 1 to m do
My[i]:= FXn(Mx[i], n);
end;
procedure TForm1.Button1Click(Sender: TObject);
{Проверка полей данных на пустые значения. Формирование массива Mx. Формирование массива My. Вывод №-элемента, Mx[i], My[i]}
var i: Byte;
begin
Label3.Caption:= ''; //очистка метки вывода результатов
if LabeledEdit1.Text='' //поле X0 пустое?
then begin
ShowMessage('Введите X0! ');
Exit //досрочное завершение процедуры
end;
if LabeledEdit2.Text='' //поле dX пустое?
then begin
ShowMessage('Введите dX! ');
exit //досрочное завершение процедуры
end;
if LabeledEdit3.Text<>'' //поле n не пустое?
then n:= StrToFloat( LabeledEdit3.Text) //преобразует строку в число n
else begin
ShowMessage('Введите n!');
exit //досрочное завершение процедуры
end;
Cr_Mx(LabeledEdit1.Text, LabeledEdit2.Text, Mx); //формирует массив Mx
Cr_My(Mx, My, n); //формирует массив My
For i :=1 to m do //вывод
Label3.Caption:= Label3.Caption+ IntToStr(i)+#9+ //номер элемента массива
FloatToStrF(Mx[i], ffGeneral, 5, 3)+ #9+ //Mx[i] элемент
FloatToStrF(My[i], ffGeneral, 5, 3)+ #13; //My[i] элемент
end; //конец процедуры