Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 1_2сем.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
256 Кб
Скачать
  1. Процедура обработки щелчка на кнопке «Вычисление» (кн. Button_calc)

procedure TForm1.Button_calcClick(Sender: TObject);

const n_max=20; // максим. число строк

m_max=10; // максим число столбцов

type matr=array[1..n_max,1..m_max] of integer;

type vect=array[1..n_max] of integer;

var n,m:integer; //n-число строк, m-число столбцов

var a:matr;

b:vect;

i,j,i0,j0,s:integer;

begin

// ввод размерности матрицы и настройка компонентов StringGrid

n:=StrToInt(Edit_n.Text);

m:=StrToInt(Edit_m.Text);

StringGrid_a.RowCount:=n;

StringGrid_a.ColCount:=m;

StringGrid_b.RowCount:=n;

StringGrid_b.ColCount:=1;

// ввод самой матрицы

if (RadioGroup1.ItemIndex =0) // вручную

then for i:=1 to n do

for j:=1 to m do

a[i,j]:=StrToInt(StringGrid_a.Cells[j-1,i-1])

else for i:=1 to n do // заполнение случайными числами

for j:=1 to m do

begin

a[i,j]:=Random(101); // числа от 0 до 100

StringGrid_a.Cells[j-1,i-1]:=IntToStr(a[i,j])

end;

// заполнение массива В

for i:=1 to n do

begin

s:=0;

for j:=1 to m do

if (a[i,j] mod 2 <>0 ) then s:=s+a[i,j];

b[i]:=s;

StringGrid_b.Cells[0,i-1]:=IntToStr(s)

end;

// поиск нечетного элемента в нижней правой позиции

for i:=n downto 1 do

for j:=m downto 1 do

if (a[i,j] mod 2 <>0 ) then

begin

i0:=i;

j0:=j;

Edit_j0.Text:=IntToStr(j0);

Edit_i0.Text:=IntToStr(i0);

exit // выход из процедуры

end;

ShowMessage('Матрица не содержит нечетных элементов')

end;

  1. Процедура обработки щелчка на кнопке «Очистка» (кн. Button_clear)

procedure TForm1.Button_clearClick(Sender: TObject);

var i,j:integer;

begin

Edit_n.Clear ;

Edit_m.Clear ;

Edit_i0.Clear ;

Edit_j0.Clear ;

with StringGrid_a do

for i:=0 to RowCount-1 do

for j:=0 to ColCount-1 do

Cells[j,i]:='';

with StringGrid_b do

for i:=0 to RowCount-1 do

Cells[0,i]:='';

end;

  1. Процедура обработки события OnCreate (Создание) формы

(для входа в редактор кода процедуры надо дважды щелкнуть на форме)

procedure TForm1.FormCreate(Sender: TObject);

begin

Randomize //для генерации новых случ-ных чисел при запуске приложения

end;

Пояснения

Компоненты GroupBox и RadioGroup.

Панель GroupBox (3-я кнопка справа на странице Standard) используется для зрительного объединения функционально связанных между собой элементов. Например, исходные данные мы разместили на GroupBox1, а результаты вычислений на GroupBox2. Теперь можно по-разному настраивать свойства входных и выходных данных – с помощью соответствующего GroupBox. Свойство Caption – надпись в левом верхнем углу панели.

RadioGroup (2-я кнопка справа на странице Standard) – панель переключателей (в Delphi они называются радиокнопками). Используется для объединения группы радиокнопок, которые можно располагать столбцами или строками. В таблице 11.2 перечислены наиболее важные свойства компонента.

Таблица 11.2. Наиболее важные свойства RadioGroup

Свойство

Описание

Caption

Надпись в левом верхнем углу панели

Items

Список надписей кнопок, имеющих строковый тип (аналогично, списку Lines компонента Memo). Щелкнув на многоточии справа от списка Items, попадаем в редактор списка строк. Сюда заносим надписи, которые хотим видеть около кнопок, по одной в строке. Сколько запишем строчек, столько будет и кнопок. Это индексированное множество строк типа string. Индексы начинаются от нуля. Items[0] – это 1-я строка списка

Text

Содержит все строки списка в виде одной строки

Columns

Число столбцов, в которых располагаются радиокнопки. По умолчанию Columns=1, т.е. радиокнопки размещаются друг под другом. Если задать, например, Columns=2, то кнопки будут располагаться в 2 столбца

Count

Содержит число строк списка

Capacity

Число строк, которое может содержать список

ItemIndex

Показывает индекс выбранной кнопки. Первая кнопка имеет индекс = 0. По умолчанию ItemIndex = -1, т.е. ни одна кнопка не выбрана

Компонент RadioGroup используется, если надписи кнопок имеют приблизительно одинаковую длину и число кнопок в каждом столбце одинаково. Если желательно нерегулярное расположение кнопок, то следует использовать компоненты RadioButton, сгруппированные панелью GroupBox.

Оператор with. Используется для сокращения записи при обращении к свойствам и методам объекта.

Синтаксис:

with объект do оператор;

Пример. Вместо следующего фрагмента программы:

Form1.GroupBox1.StringGrid1.FixedCols:=0;

Form1.GroupBox1.StringGrid1.FixedRows:=0;

Form1.GroupBox1.StringGrid1.Cells[0,1]:=’Дата’;

можно написать короче, избегая повторные ссылки на объект:

with Form1.GroupBox1.StringGrid1 do

begin

FixedCols:=0;

FixedRows:=0;

Cells[0,1]:=’Дата’;

end;

Генерация случайных чисел для заполнения массива

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

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

    2. псевдослучайные числа будут повторяться с некоторым периодом (хотя и очень большим). Если количество случайных чисел больше периода, то они начнут повторяться, а такие числа нельзя считать случайными.

В модуле System, подключенном в предложении uses, объявлена функция Random, которая генерирует псевдослучайные числа, равномерно распределённые в некотором диапазоне.

Существует два способа обращения к функции Random:

без параметра с параметром Range типа integer

функция возвращает случайные действительные числа, равномерно распределеныее в интервале 0х<1

функция возвращает случайные целые числа, равномерно распределеные в интервале

0х< Range

Пример 1. Заполнить массив А случайными действительными числами от 0 до 1.

for i:=Low(A) to High(A) do

A[i]:=Random;

Здесь функции Low(A) и High(A) возвращают соответственно нижнюю и верхнюю границы индекса массива А.

Пример 2. Заполнить массив А случайными действительными числами от 50 до 150. Для этого достаточно сдвинуть начальное значение чисел на 50 и умножить генерируемые числа на длину интервала: (150–50):

var A1,A2:real;

. . . . . . . . . . .

A1:=50;

A2:=150;

for i:=Low(A) to High(A) do

A[i]:=А1 + (А2-А1)*Random;

//массив А заполняется случайными числами 50х<150.

Пример 3. Заполнить массив В случайными целыми числами от 0 до 100.

for i:=Low(В) to High(В) do

В[i]:=Random(101);

Пример 4. Заполнить массив В случайными целыми числами, равномерно распределенными от 100 до 200

for i:=Low(В) to High(В) do

В[i]:=100+Random(101);

Так как генерируются псевдослучайные числа, то при очередном запуске программы будет вырабатываться одна и та же последовательность. Это удобно только при отладке. Чтобы этого не происходило, нужно генератору случайных чисел задавать новое случайное число. Это делает функция Randomize, которую достаточно вставить где-нибудь в программе, например, в процедуру обработки события OnCreate Формы. Для этого надо дважды щелкнуть на Форме и записать:

procedure Tform1.FormCreate( );

begin

Randomize

end;