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

Программа «б)» во многом схожа с программой «а)» и реализуется в описании события OnClick кнопки Calc2_B. Реализация отличается следующими моментами:

вместо заранее заданного количества членов ряда n задается точность расчета e;

так как заранее неизвестно количество членов ряда, подлежащих суммированию, то требуется применение вместо цикла for либо цикла while, либо цикла repeat…until, выход из которых производится при невыполнении или выполнении, соответственно, некоторого условия.

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

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

2.4 Одномерные массивы

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

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

Source_M класса TMemo для ввода исходного массива;

Dest_M класса TMemo для вывода преобразованного массива;

Source_L класса TLabel для подписи компонента Source_M;

Dest_L класса TLabel для подписи компонента Dest_M;

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

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

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

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

Значение

Source_L.Caption

&Исходный массив

Source_L.FocusControl

Source_M

 

 

Source_M.ScrollBars

ssVertical

16

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

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

Значение

Dest_L.Caption

&Преобразованный массив

Dest_L.FocusControl

Dest_M

Dest_M.ReadOnly

True

Dest_M.ScrollBars

ssVertical

 

 

Calc_B.Caption

П&реобразовать

Очистим свойство «Lines» у компонентов Source_M и Dest_M. Опишем событие OnClick кнопки Calc_B:

procedure TForm1.Calc_BClick(Sender: TObject); var

mas : array[1..100] of integer; count,i,max : integer;

begin

{Определение количества элементов массива} count := Source_M.Lines.Count;

{Заполнение массива} for i := 1 to count do

mas[i] := StrToInt(Source_M.Lines.Strings[i-1]); {Поиск максимального значения}

max := mas[1];

for i := 2 to count do if mas[i]>max then max := mas[i];

{Преобразование массива} for i := 1 to count do

mas[i] := mas[i]*max; {Вывод результата}

Dest_M.Lines.Clear; // Удаление старых строк for i := 1 to count do

Dest_M.Lines.Add(IntToStr(mas[i])); // Добавление строк

end;

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

2.5 Матрицы

Задание: Составить программу определения индексов минимального элемента прямоугольной целочисленной матрицы A, имеющей n строк и m столбцов (значения всех элементов различны).

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

17

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

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

Source_SG класса TStringGrid для ввода исходной матрицы;

Rows_SE класса TSpinEdit для задания количества строк n;

Cols_SE класса TSpinEdit для задания количества столбцов m;

FindRow_E класса TEdit для вывода индекса строки найденного эле-

мента;

FindCol_E класса TEdit для вывода индекса столбца найденного элемента;

Source_L класса TLabel для подписи компонента Source_SG;

Rows_L класса TLabel для подписи компонента Rows_SE;

Cols_L класса TLabel для подписи компонента Cols_SE;

FindRow_L класса TLabel для подписи компонента FindRow_E;

FindCol_L класса TLabel для подписи компонента FindCol_E;

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

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

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

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

Значение

Source_SG.RowCount

2

 

 

Source_SG.ColCount

2

 

 

Source_SG.FixedCols

0

Source_SG.FixedRows

0

Source_SG.Options.goEditing

True

 

 

Source_SG.Options.goAlwaysShowEditor

True

 

 

Rows_SE.MinValue

2

Rows_SE.MaxValue

10

Rows_SE.Value

2

Cols_SE.MinValue

2

 

 

18

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

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

Значение

Cols_SE.MaxValue

10

Cols_SE.Value

2

Source_L.Caption

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

Source_L.FocusControl

Source_SG

 

 

Rows_L.Caption

Число &строк

Rows_L.FocusControl

Rows_SE

 

 

Cols_L.Caption

Число с&толбцов

Cols_L.FocusControl

Cols_SE

 

 

FindRow_L.Caption

Номер стро&ки найденного эле-

 

мента

FindRow_L.FocusControl

FindRow_E

FindCol_L.Caption

Номер столб&ца найденного эле-

 

мента

FindCol_L.FocusControl

FindCol_E

FindRow_E.ReadOnly

True

FindCol_E.ReadOnly

True

Calc_B.Caption

Рас&чет

Очистим свойство «Text» у компонентов FindRow_E и FindCol_E. Опишем событие OnChange компонента Rows_SE:

procedure TForm1.Rows_SEChange(Sender: TObject); begin

Source_SG.RowCount := Rows_SE.Value; end;

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

procedure TForm1.Cols_SEChange(Sender: TObject); begin

Source_SG.ColCount := Cols_SE.Value; end;

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

procedure TForm1.Calc_BClick(Sender: TObject); var

matr : array[1..10,1..10] of integer; i,j,min_i,min_j : integer;

begin

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

for i := 1 to Source_SG.RowCount do for j := 1 to Source_SG.ColCount do

matr[i,j] := StrToInt(Source_SG.Cells[j-1,i-1]); {Поиск: min_i - номер строки минимального элемента

min_j - номер столбца минимального элемента}

19