Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Р5_Циклы_печать.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
200.7 Кб
Скачать

Операции с массивами

Следует различать операции с отдельными элементами массива и с массивом в целом.

С элементами массива можно производить все без исключения операции, допустимые для указанного типа.

Операции с массивами в целом возможны только для массивов одного типа. Например, операции присваивания значений одного массива другому.

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; //конец процедуры

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]