Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование / Программирование в среде Delphi (Часть 2).pdf
Скачиваний:
89
Добавлен:
27.05.2015
Размер:
1.41 Mб
Скачать

2 Примеры выполнения практических заданий

2.1 Стандартные алгоритмы

Задание: Дана целочисленная квадратная матрица А. Получить массив B, i-ый элемент которого содержит среднее значение элементов i-ой строки матрицы A. Отсортировать массив B по возрастанию1.

Будем считать, что начальное и минимально число строк и столбцов матрицы равно двум, а максимальное – 10.

Для решения поставленной задачи потребуются компоненты:

Count_SE класса TSpinEdit для задания размерности матрицы А;

Matr_SG класса TStringGrid для ввода матрицы A;

Mas_SG класса TStringGrid для вывода массива В;

Count_L класса TLabel для подписи компонента Count_SE;

Matr_L класса TLabel для подписи компонента Matr_SG;

Mas_L класса TLabel для подписи компонента Mas_SG;

Calc_B класса TButton для активизации расчета.

Установим следующие значения свойств компонентов (таблица 1):

Таблица 1 – Значения свойств компонентов для примера выполнения задания по реализации стандартных алгоритмов

Компонент.Свойство

Значение

Count_L.Caption

Ра&змер исходной матрицы

Count_L.FocusControl

Count_SE

Count_SE.MinValue

2

 

 

Count_SE.MaxValue

10

 

 

Count_SE.Value

2

Matr_L.Caption

Исходная матри&ца

Matr_L.FocusControl

Matr_SG

Matr_SG.RowCount

2

Matr_SG.ColCount

2

Matr_SG.FixedCols

0

 

 

Matr_SG.FixedRows

0

 

 

Matr_SG.Options.goEditing

True

Matr_SG.Options.goAlwaysShowEditor

True

Mas_L.Caption

Полученный ма&ссив

Mas_L.FocusControl

Mas_SG

Mas_SG.RowCount

1

 

 

Mas_SG.ColCount

2

 

 

Mas_SG.FixedCols

0

1 Требования к заданиям по используемым компонентам не приводятся

15

Продолжение таблицы 1

Компонент.Свойство

Значение

Mas_SG.FixedRows

0

Calc_B.Caption

Рас&чет

Опишем событие OnChange компонента Count_SE:

procedure TForm1.Count_SEChange(Sender: TObject); begin

Matr_SG.RowCount := Count_SE.Value;

Matr_SG.ColCount := Count_SE.Value;

{Размерность матрицы и размер массива одинаковые} Mas_SG.ColCount := Count_SE.Value;

end;

Опишем событие OnClick кнопки Calc_B1:

procedure TForm1.Calc_BClick(Sender: TObject); var

matr : array of array of integer; mas : array of double;

i,j : integer; temp : double;

begin

{Перед использованием динамических массивов им необходимо

выделить память} SetLength(matr,Count_SE.Value,Count_SE.Value); SetLength(mas,Count_SE.Value);

{Заполнение матрицы}

for i := 0 to Count_SE.Value-1 do for j := 0 to Count_SE.Value-1 do

matr[i,j] := StrToInt(Matr_SG.Cells[j,i]); {Перебор строк матрицы}

for i := 0 to Count_SE.Value-1 do begin

{Для каждой строки находится сумма ее элементов} mas[i] := 0;

for j := 0 to Count_SE.Value-1 do mas[i] := mas[i]+matr[i,j];

{Для нахождения среднего сумма элементов строки делится на их количество}

mas[i] := mas[i]/Count_SE.Value; end;

{Сортировка массива} i := 0;

while i<Count_SE.Value-1 do if mas[i]>mas[i+1] then

1 Реализации алгоритмов, приводимые в примерах, не всегда оптимальны, так как направлены на раскрытие механизмов работы с компонентами.

16

begin

temp := mas[i]; mas[i] := mas[i+1]; mas[i+1] := temp; if i>0 then

dec(i) else

inc(i);

end else

inc(i); {Вывод массива}

for i := 0 to Count_SE.Value-1 do Mas_SG.Cells[i,0] := FloatToStr(mas[i]);

{Перед завершением программы необходимо очистить память,

занимаемую динамическими массивами} SetLength(matr,0,0); SetLength(mas,0);

end;

Внешний вид1 и пример работы программы показаны на рисунке 2.

Рисунок 2 – Внешний вид и пример работы программы, реализующей стандартные алгоритмы

2.2 Элементы выбора

Задание: Дана целочисленная квадратная матрица A размером n. Получить матрицу B путем замены кратных двум, трем, четырем элементов матрицы A в любой комбинации на количество положительных, отрицательных или нулевых элементов матрицы A.

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

17

Будем считать, что начальное и минимально число строк и столбцов матриц равно двум, а максимальное – 10.

Для решения поставленной задачи потребуются компоненты:

Count_SE класса TSpinEdit для задания размерности матриц;

MatrA_SG класса TStringGrid для ввода матрицы A;

MatrB_SG класса TStringGrid для вывода матрицы B;

Change_GB класса TGroupBox для группировки компонентов выбора

заменяемых элементов;

Div2_CB класса TCheckBox для организации выбора необходимости замены элементов, кратных двум;

Div3_CB класса TCheckBox для организации выбора необходимости замены элементов, кратных трем;

Div4_CB класса TCheckBox для организации выбора необходимости замены элементов, кратных четырем;

Count_RG класса TRadioGroup для указания типа подсчета количества элементов;

Count_L класса TLabel для подписи компонента Count_SE;

MatrA_L класса TLabel для подписи компонента MatrA_SG;

MatrB_L класса TLabel для подписи компонента MatrB_SG;

Calc_B класса TButton для активизации расчета.

Установим следующие значения свойств компонентов (таблица 2):

Таблица 2 – Значения свойств компонентов для примера выполнения задания с использованием компонентов выбора

Компонент.Свойство

Значение

Count_L.Caption

Ра&змер исходной матрицы

Count_L.FocusControl

Count_SE

 

 

Count_SE.MinValue

2

 

 

Count_SE.MaxValue

10

Count_SE.Value

2

MatrA_L.Caption

Исходная &матрица

MatrA_L.FocusControl

MatrA_SG

MatrA_SG.RowCount

2

MatrA_SG.ColCount

2

 

 

MatrA_SG.FixedCols

0

 

 

MatrA_SG.FixedRows

0

MatrA_SG.Options.goEditing

True

MatrA_SG.Options.goAlwaysShowEditor

True

MatrB_L.Caption

П&олученная матрица

MatrB_L.FocusControl

MatrB_SG

 

 

MatrB_SG.RowCount

2

 

 

MatrB_SG.ColCount

2

MatrB_SG.FixedCols

0

18

Продолжение таблицы 2

Компонент.Свойство

Значение

MatrB_SG.FixedRows

0

Change_GB.Caption

Замена элементов

Div2_CB.Caption

кратных &двум

Div3_CB.Caption

кратных &трем

Div4_CB.Caption

кратных &четырем

Count_RG.Caption

На количество элементов

Count_RG.Items

поло&жительных

 

отри&цательных

 

н&улевых

Count_RG.ItemIndex

0

 

 

Calc_B.Caption

Расч&ет

Опишем событие OnChange компонента Count_SE:

procedure TForm1.Count_SEChange(Sender: TObject); begin

{Размер матриц одинаков, поэтому установка количества строк и столбцов осуществляется у обеих матриц} MatrA_SG.RowCount := Count_SE.Value;

MatrA_SG.ColCount := Count_SE.Value;

MatrB_SG.RowCount := Count_SE.Value;

MatrB_SG.ColCount := Count_SE.Value; end;

Опишем событие OnClick кнопки Calc_B:

procedure TForm1.Calc_BClick(Sender: TObject); var

matr : array of array of integer; i,j,count : integer;

begin

{Перед использованием динамического массива ему необходимо выделить память} SetLength(matr,Count_SE.Value,Count_SE.Value); {Заполнение матрицы}

for i := 0 to Count_SE.Value-1 do for j := 0 to Count_SE.Value-1 do

matr[i,j] := StrToInt(MatrA_SG.Cells[j,i]); {Подсчет количества указанных пользователем элементов} count := 0;

for i := 0 to Count_SE.Value-1 do for j := 0 to Count_SE.Value-1 do

{Элемент требует учета, если:

"он положительный и пользователь выбрал учет

положительных элементов или он отрицательный и пользователь выбрал учет отрицательных элементов или

19