Обработка одномерных массивов. (Лекция 8)

Содержание

Слайд 2

07/22/2023 Романькова Т.Л. Определение одномерного массива. Массив - это структурированный тип

07/22/2023

Романькова Т.Л.

Определение одномерного массива.

Массив - это структурированный тип данных, представляющий

собой последовательность однотипных элементов, имеющих общее имя и снабженных индексами (порядковыми номерами).

Массивы удобно использовать для хранения однородной по своей природе информации, например, таблиц и списков.

Например, в виде одномерного массива строк можно задать список студентов:
( ‘Иванов’, ‘Петров’, ‘Сидоров’, ’Песков’, ’Петренко’),
А в виде массива вещественных чисел – рост этих студентов (в см):
(178,2 172,3 200,5 185,2 169)

Слайд 3

07/22/2023 Романькова Т.Л. Индекс - это выражение целого типа (integer, byte),

07/22/2023

Романькова Т.Л.

Индекс - это выражение целого типа (integer, byte),

определяющее положение элемента в массиве.

Размерность массива - это количество элементов в массиве.

Последовательность
(‘Иванов’ 178,2 ‘Петров’ ‘Сидоров’ 25 ’Песков’, ’Петренко’)
не может являться массивом.

Элементами массива могут быть данные любого типа.

Слайд 4

07/22/2023 Романькова Т.Л. Элемент массива в языке Delphi обозначается следующим образом:

07/22/2023

Романькова Т.Л.

Элемент массива в языке Delphi обозначается следующим образом:
<имя массива>[<индекс>].


Например, x[3] - третий элемент массива x.

Здесь <имя массива> - правильный идентификатор.

Слайд 5

07/22/2023 Романькова Т.Л. Описание одномерного массива. Перед использованием массив должен быть

07/22/2023

Романькова Т.Л.

Описание одномерного массива.

Перед использованием массив должен быть описан.
Существует два

способа описания массива :

а)
var
< имя массива >: array [< нач. значение индекса >..< кон. знач. инд.>] of < тип элементов>;
Например,
var
x:array[1..20] of integer;
В памяти компьютера будет отведено место для 20 целых чисел (80 байт). Т.е. максимальная размерность массива в этом случае – 20 элементов.

Слайд 6

07/22/2023 Романькова Т.Л. Описание одномерного массива. б) type = array [

07/22/2023

Романькова Т.Л.

Описание одномерного массива.

б) type
< имя типа > = array

[< нач. значение индекса >..< кон.знач. инд. >]
of < тип элементов>;
var
< имя массива >: < имя типа >;
Например,
type
massiv = array[1..20] of integer;
var
x : massiv;
В памяти компьютера будет отведено место для 20 целых чисел (40 байт).
Слайд 7

07/22/2023 Романькова Т.Л. Ввод одномерного массива с использованием ВК StringGrid. нет

07/22/2023

Романькова Т.Л.

Ввод одномерного массива с использованием ВК StringGrid.

нет

да

Пусть n - размерность

массива;
x - исходный массив;
i - номер текущего элемента массива.
Слайд 8

07/22/2023 Романькова Т.Л. Для реализации этого алгоритма на форме нужно разместить

07/22/2023

Романькова Т.Л.

Для реализации этого алгоритма на форме нужно разместить ВК Edit

для ввода размерности массива и ВК StringGrid для ввода значений элементов масива.

Для StringGrid нужно установить значение true для опции goEditing свойства Options,

при вводе в строку для свойства ColCount установить значение, равное максимальной размерности массива, а для свойства RowCount установить значение 1;

при вводе в столбец установить значение, равное максимальной размерности массива, для свойства RowCount, а для свойства ColCount установить значение 1.

Слайд 9

07/22/2023 Романькова Т.Л. Если x - массив целых чисел (например, x

07/22/2023

Романькова Т.Л.

Если x - массив целых чисел (например, x :array[1..20] of

integer;), то в программе для ввода используем следующий фрагменты:
ввод в строку
n:=strtoint(edit1.Text);
for i:=1 to n do
x[i]:=strtoint(stringgrid1.Cells[i-1,0]);

б) ввод в столбец
n:=strtoint(edit1.Text);
for i:=1 to n do
x[i]:=strtoint(stringgrid1.Cells[0,i-1]);

Слайд 10

07/22/2023 Романькова Т.Л. Если x - массив вещественных чисел (например, x

07/22/2023

Романькова Т.Л.

Если x - массив вещественных чисел (например, x :array[1..20] of

real;), то в программе для ввода используем следующий фрагменты:
а) ввод в строку
n:=strtoint(edit1.Text);
for i:=1 to n do
x[i]:=StrToFloat(stringgrid1.Cells[i-1,0]);

б) ввод в столбец
n:=strtoint(edit1.Text);
for i:=1 to n do
x[i]:=StrToFloat(stringgrid1.Cells[0,i-1]);

Слайд 11

07/22/2023 Романькова Т.Л. Для того, чтобы при изменении размерности массива автоматически

07/22/2023

Романькова Т.Л.

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

строк или столбцов компонента StringGrid, нужно создать процедуру – обработчик события изменения текста в компоненте Edit двойным щелчком на этом компоненте. И набрать код:

procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.text<>'' then
stringgrid1.ColCount:=StrToInt(edit1.text)//для ввода
//в строку
end;

Слайд 12

07/22/2023 Романькова Т.Л. Вывод одномерного массива с использованием ВК StringGrid. .

07/22/2023

Романькова Т.Л.

Вывод одномерного массива с использованием ВК StringGrid. .

нет

да

а) Вывод массива целых

чисел в столбец
for i:=1 to n do
stringgrid1.Cells[0,i-1]:=
IntToStr(x[i]);

б) Вывод массива целых чисел в строку:
for i:=1 to n do
stringgrid1.Cells[i-1,0]:=
IntToStr(x[i]);

Аналогично осуществляется вывод массива вещественных чисел.

Слайд 13

07/22/2023 Романькова Т.Л. Типовые алгоритмы обработки одномерных массивов. Вычисление суммы, произведения,

07/22/2023

Романькова Т.Л.

Типовые алгоритмы обработки одномерных массивов.

Вычисление суммы, произведения, количества элементов массива.


Нахождение максимального и минимального элементов массива.

Слайд 14

07/22/2023 Романькова Т.Л. K =0 I = I ≤ n да

07/22/2023

Романькова Т.Л.

K =0

I =<нач. знач.>

I ≤ n

да

нет

условие

да

нет

K=K+1

I =I+<шаг.>

Вычисление количества элементов массива,

удовлетворяющих заданному условию.

Реализация в программе:
k:=0;
i:=<нач. Знач.>;
while i<=n do
begin
if <условие> then
k:=k+1;
i:=i+<шаг>
end;

Слайд 15

07/22/2023 Романькова Т.Л. S =0 I = I ≤ n да

07/22/2023

Романькова Т.Л.

S =0

I =<нач. знач.>

I ≤ n

да

нет

условие

да

нет

S=S+x[i]

I =I+<шаг.>

Вычисление суммы элементов массива,

удовлетворяющих заданному условию.

Реализация в программе:
S:=0;
i:=<нач. Знач.>;
while i<=n do
begin
if <условие> then
S:=S+x[i];
i:=i+<шаг>
end;

Слайд 16

07/22/2023 Романькова Т.Л. P =1 I = I ≤ n да

07/22/2023

Романькова Т.Л.

P =1

I =<нач. знач.>

I ≤ n

да

нет

условие

да

нет

P=P*x[i]

I =I+<шаг.>

Вычисление произведения элементов массива,

удовлетворяющих заданному условию

P:=1;
i:=<нач. Знач.>;
while i<=n do
begin
if <условие> then
P:=P*x[i];
i:=i+<шаг>
end;

Слайд 17

07/22/2023 Романькова Т.Л. Пример вычисления суммы, произведения, количества элементов массива В

07/22/2023

Романькова Т.Л.

Пример вычисления суммы, произведения, количества элементов массива

В заданном массиве найти

среднее арифметическое отрицательных элементов, стоящих на местах, кратных 3; вычислить произведение элементов, не принадлежащих интервалу (A , B].

Например, пусть задан массив
x = (-2 3 -3 1 4 -5 -1 0 2 8 -3 -7)

Заданный интервал (-3, 3].

Тогда среднее арифметическое отрицательных элементов с номерами, кратными 3, должно получиться равным
(-3 + -5 + -7) / 3= -5

Произведение элементов, не принадлежащих интервалу (-3 , 3]:
-3* 4*(-5)*8*(-3)*(-7) = 10080

Слайд 18

07/22/2023 Романькова Т.Л. Введем следующие обозначения: n - размерность массива; x

07/22/2023

Романькова Т.Л.

Введем следующие обозначения:

n - размерность массива;

x - исходный массив;

i -

номер текущего элемента массива;

A, B - границы заданного интервала;

S -сумма отрицательных элементов, стоящих на местах, кратных 3;

k -количество отрицательных элементов, стоящих на местах, кратных 3;

Sa -среднее арифметическое отрицательных элементов, стоящих на местах, кратных 3;

P -произведение элементов, не принадлежащих интервалу (A , B];

k1 –количество элементов, не принадлежащих интервалу (A , B];

Слайд 19

да нет да нет 0 1 2 3 4 5 6 7 8 9

да

нет

да

нет

0

1

2

3

4

5

6

7

8

9

Слайд 20

07/22/2023 Романькова Т.Л. нет да 10 11 12 13

07/22/2023

Романькова Т.Л.

нет

да

10

11

12

13

Слайд 21

07/22/2023 Романькова Т.Л. да нет да нет 14 15 16 17 18 19 20 21

07/22/2023

Романькова Т.Л.

да

нет

да

нет

14

15

16

17

18

19

20

21

Слайд 22

07/22/2023 Романькова Т.Л. нет да 22 23 24

07/22/2023

Романькова Т.Л.

нет

да

22

23

24

Слайд 23

07/22/2023 Романькова Т.Л. StringGrid

07/22/2023

Романькова Т.Л.

StringGrid

Слайд 24

07/22/2023 Романькова Т.Л. procedure TForm1.Button1Click(Sender: TObject); var i,n,k,k1:integer; x:array[1..20] of integer;

07/22/2023

Романькова Т.Л.
procedure TForm1.Button1Click(Sender: TObject);
var
i,n,k,k1:integer;
x:array[1..20] of integer;
S, Sa,

P,A,B: real;

BEGIN
n:=strtoint(edit1.Text);
for i:=1 to n do
x[i]:=strtoint(stringgrid1.Cells[i-1,0]);

A:=StrToFloat(Edit4.Text); B:=StrToFloat(Edit5.Text);

Слайд 25

07/22/2023 Романькова Т.Л. S:=0; k:=0; i:=3; while i begin if x[i] S:=S+x[i]; k:=k+1 end; i:=i+3 end;

07/22/2023

Романькова Т.Л.

S:=0; k:=0;
i:=3;
while i<= n do
begin
if x[i]<0 then begin

S:=S+x[i];
k:=k+1
end;
i:=i+3
end;
Слайд 26

07/22/2023 Романькова Т.Л. if k>0 then begin Sa:=S/k; Edit2.Text:=FloatToStr(Sa); end else

07/22/2023

Романькова Т.Л.

if k>0 then
begin
Sa:=S/k;
Edit2.Text:=FloatToStr(Sa);
end
else
begin
Edit2.Text:='Нет!';


ShowMessage('В массиве нет отрицательных чисел с
номерами, кр. 3 ');
end;
Слайд 27

07/22/2023 Романькова Т.Л. P:=1; k1:=0; for i:= 1 to n do

07/22/2023

Романькова Т.Л.

P:=1; k1:=0;
for i:= 1 to n do
if (x[i]<=A) or

(x[i]>B) then
begin
P:=P*x[i];
k1:=k1+1
end;
Слайд 28

07/22/2023 Романькова Т.Л. if k1>0 then Edit3.Text:=FloatToStr(P) else begin Edit3.Text:='Нет!'; ShowMessage('Нет

07/22/2023

Романькова Т.Л.

if k1>0 then
Edit3.Text:=FloatToStr(P)
else
begin
Edit3.Text:='Нет!';
ShowMessage('Нет элементов,

не принадл. интервалу');
end;
end;
Слайд 29

07/22/2023 Романькова Т.Л. Для проверки работы программы понадобятся два набора исходных

07/22/2023

Романькова Т.Л.

Для проверки работы программы понадобятся два набора исходных данных:

для проверки

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

Например,
x = (-2 3 3 1 2 2 -1 0 2 2 -2 1)
Заданный интервал (-3, 3].

Результатом должны быть сообщения
'Нет элементов, не принадл. интервалу'
'В массиве нет отрицательных чисел с номерами, кр. 3 '

Слайд 30

07/22/2023 Романькова Т.Л. для проверки работы в случае, когда в массиве

07/22/2023

Романькова Т.Л.

для проверки работы в случае, когда в массиве есть элементы,

удовлетворяющие условию задачи.

ShowMessage – стандартная процедура для вывода на экран окна с сообщением и кнопкой ОК.

ShowMessage(<сообщение>);

<сообщение> - выражение строкового типа, например, любая строковая константа – набор символов, заключенных в апострофы.

После появления окна с сообщением работа программы приостанавливается в ожидании реакции пользователя.

Слайд 31

07/22/2023 Романькова Т.Л. Введем следующие обозначения: n - размерность массива; x

07/22/2023

Романькова Т.Л.

Введем следующие обозначения:

n - размерность массива;

x - исходный массив;

i -

номер текущего элемента массива;

Max - значение максимального элемента;

Nm - номер максимального элемента;

Поиск максимального и минимального элементов массива.

Слайд 32

07/22/2023 да нет да нет Алгоритм поиска минимального элемента аналогичен.

07/22/2023

да

нет

да

нет

Алгоритм поиска минимального элемента аналогичен.

Слайд 33

07/22/2023 Романькова Т.Л. 4.6 Перестановка элементов в массиве. Чтобы поменять местами

07/22/2023

Романькова Т.Л.

4.6 Перестановка элементов в массиве.

Чтобы поменять местами два элемента массива,

можно применить так называемый метод трех стаканов.

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

1

2

3

Слайд 34

07/22/2023 Романькова Т.Л. Для перестановки элементов массива также требуется дополнительная переменная.

07/22/2023

Романькова Т.Л.

Для перестановки элементов массива также требуется дополнительная переменная.
Тип этой

переменной должен совпадать с типом элементов массива.

Пусть имеется следующее описание переменных
var
k1,k2:integer;
x:array[1..30] of real;
z:real;

Тогда обмен местами элементов массива с номерами k1 и k2 в программе можно осуществить след. образом:

Слайд 35

07/22/2023 Романькова Т.Л. z:=x[k1]; x[k1]:=x[k2]; x[k2]:=z; Пример. В заданном массиве найти

07/22/2023

Романькова Т.Л.

z:=x[k1];
x[k1]:=x[k2];
x[k2]:=z;

Пример. В заданном массиве найти максимальный

элемент и поменять его местами с предыдущим элементом.

Например, пусть задан массив
x = (-2 3 -3 1 4 -5 -1 0 2 8 -3 -7)
Тогда максимальный элемент равен 8.

Массив после обмена должен принять следующий вид:
x = (-2 3 -3 1 4 -5 -1 0 8 2 -3 -7)

Слайд 36

07/22/2023 Романькова Т.Л. Нахождение максимального и минимального элементов массива. Пример 2.

07/22/2023

Романькова Т.Л.

Нахождение максимального и минимального элементов массива.

Пример 2. В заданном

массиве найти максимальный элемент и поменять его местами с предыдущим элементом.

Например, пусть задан массив
x = (-2 3 -3 1 4 -5 -1 0 2 8 -3 -7)

Тогда максимальный элемент равен 8.

Массив после обмена должен принять следующий вид:
x = (-2 3 -3 1 4 -5 -1 0 8 2 -3 -7)

Слайд 37

07/22/2023 да нет да нет 1 2 3 4 5 6 7 8 9

07/22/2023

да

нет

да

нет

1

2

3

4

5

6

7

8

9

Слайд 38

07/22/2023 нет да 11 12 14 13 15 10

07/22/2023

нет

да

11

12

14

13

15

10

Слайд 39

07/22/2023 Романькова Т.Л.

07/22/2023

Романькова Т.Л.

Слайд 40

07/22/2023 Романькова Т.Л. Procedure TForm1.Button1Click(Sender: TObject); var i,n,max,nm:integer; x:array[1..20] of integer;

07/22/2023

Романькова Т.Л.

Procedure TForm1.Button1Click(Sender: TObject);

var
i,n,max,nm:integer;
x:array[1..20] of integer;

begin
n:=strtoint(edit1.Text);
for i:=1

to n do
x[i]:=strtoint(stringgrid1.Cells[i-1,0]);

max:=x[1];
nm:=1;

for i:=2 to n do
if x[i]>max then
begin
max:=x[i]; nm:=i
end;

Слайд 41

07/22/2023 Романькова Т.Л. if nm 1 then begin x[nm]:=x[nm-1]; x[nm-1]:=max end

07/22/2023

Романькова Т.Л.

if nm<>1 then
begin
x[nm]:=x[nm-1];
x[nm-1]:=max
end
else
ShowMessage(‘Максимальный элемент

стоит на первом месте!’);

edit2.Text:=inttostr(max);
for i:=1 to n do
stringgrid2.Cells[i-1,0]:=Inttostr(x[i]);
end;

Слайд 42

07/22/2023 Романькова Т.Л. Создание приложений с несколькими формами Чтобы добавить к

07/22/2023

Романькова Т.Л.

Создание приложений с несколькими формами

Чтобы добавить к приложению новую форму,

нужно выполнить команду главного меню File – New Form или нажать кнопку New Form на панели инструментов.

В результате к приложению будет добавлена пустая форма Form2 (или Form3, Form4 и т.д.) и соответствующий ей модуль Unit 2.

При этом в файл проекта будут автоматически добавлены следующие строки программы:

Unit2 in 'Unit2.pas' {Form2} в разделе подключения модулей Uses

Слайд 43

07/22/2023 Романькова Т.Л. и Application.CreateForm(TForm2, Form2); { создание формы} в разделе

07/22/2023

Романькова Т.Л.

и
Application.CreateForm(TForm2, Form2);
{ создание формы} в разделе операторов.

Та форма,

которая в файле проекта создается первой, является главной, и окно этой формы появляется на экране при запуске программы на выполнение.

По умолчанию это форма, которая была автоматически создана при создании приложения (Form1).

Если необходимо, чтобы в момент старта программы появлялось окно любой другой формы, нужно в файле проекта оператор создания этой формы

Application.CreateForm(<имя класса>,<имя формы>);

расположить раньше операторов создания всех остальных форм.

Слайд 44

07/22/2023 Романькова Т.Л. Сделать форму главной можно также, воспользовавшись командой меню

07/22/2023

Романькова Т.Л.

Сделать форму главной можно также, воспользовавшись командой меню Project –

Options и на вкладке Forms выбрав в списке Main Form нужную форму.

Окна всех остальных форм появляются на экране только после обращения к методам Show или ShowModal в тексте программы:

<имя формы>. Show;
<имя формы>. ShowModal;

Например, Form2. ShowModal;

Слайд 45

07/22/2023 Романькова Т.Л. Метод Show показывает форму в немодальном режиме, т.е.

07/22/2023

Романькова Т.Л.

Метод Show показывает форму в немодальном режиме, т.е. окно появляется

на экране и работает одновременно с другими окнами. При этом управление сразу передается оператору, стоящему за обращением к этому методу.

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

Слайд 46

07/22/2023 Романькова Т.Л. Чтобы получить доступ к методам и визуальным компонентам

07/22/2023

Романькова Т.Л.

Чтобы получить доступ к методам и визуальным компонентам формы из

модуля, в котором эта форма не описана, нужно подключить к этому модулю в разделе Uses модуль, соответствующий форме.

Это можно сделать следующим образом:

Набрать в разделе implementation предложение
Uses <имя модуля>;

Выполнить команду меню
File – Uses Unit
и выбрать в появившемся окне нужный модуль.

Попытаться запустить программу на выполнение и в ответ на сообщение Delphi нажать кнопку Yes.

Слайд 47

07/22/2023 Романькова Т.Л. Например, добавим в программу из предыдущего примера окно

07/22/2023

Романькова Т.Л.

Например, добавим в программу из предыдущего примера окно с информацией

об авторе, которое будет появляться после нажатия на соответствующую кнопку.

Для этого на главной форме разместим кнопку BitBtn и установим для нее все необходимые свойства: Caption – Об авторе, Glyph – файл с фотографией.

Слайд 48

07/22/2023 Романькова Т.Л. Создадим новую форму и разместим на ней компонент

07/22/2023

Романькова Т.Л.

Создадим новую форму и разместим на ней компонент Memo. Установим

для него все необходимые свойства: шрифт, размер, выравнивание, в том числе в свойстве Lines наберем нужный текст.

Разместим на форме компонент Image (страница Additional) для вставки фотографии. Используя свойство Picture загрузим соответствующий графический файл.

Подключим модуль Unit2 к модулю Unit1. Для этого активизируем главную форму и выполним команду меню File – Uses Unit.

В результате в реализационной части (implementation) модуля Unit1 появится предложение
uses Unit2;

Слайд 49

07/22/2023 Романькова Т.Л. Создадим процедуру обработки события нажатия кнопки Об авторе

07/22/2023

Романькова Т.Л.

Создадим процедуру обработки события нажатия кнопки Об авторе и обратимся

в разделе операторов этой процедуры к методу Show или ShowModal второй формы:

procedure TForm1.BitBtn1Click(Sender: TObject);
begin
Form2.Show
end;

Если нужно вывести результаты вычислений в новом окне, нужно создать новую форму и разместить на ней необходимые для вывода визуальные компоненты.

В тексте программы при выводе результатов при обращении к визуальным компонентам новой формы нужно перед именем ВК указывать имя формы.

Слайд 50

07/22/2023 Романькова Т.Л. Например, для вывода значения вещественной переменной x на форме Form2 нужно набрать Form2.Edit1.Text:=FloatToStr(x);

07/22/2023

Романькова Т.Л.

Например, для вывода значения вещественной переменной x на форме Form2

нужно набрать
Form2.Edit1.Text:=FloatToStr(x);
Слайд 51

07/22/2023 Романькова Т.Л. 6. Формирование нового массива из элементов исходного, удовлетворяющих

07/22/2023

Романькова Т.Л.

6. Формирование нового массива из элементов исходного, удовлетворяющих заданному условию.

Пусть

n - размерность массива; x - исходный массив;
i - номер текущего элемента массива, j - количество элементов нового массива, y – новый массив.
Слайд 52

07/22/2023 Романькова Т.Л. да нет да нет

07/22/2023

Романькова Т.Л.

да

нет

да

нет

Слайд 53

07/22/2023 Романькова Т.Л. J:=0; i:= ; while i begin if then

07/22/2023

Романькова Т.Л.

J:=0;
i:=<нач. Знач.>;
while i<=n do
begin
if <условие>

then
begin
j:=j+1;
y[j]:=x[i]
end;
i:=i+<шаг>
end;
Слайд 54

07/22/2023 Романькова Т.Л. Пример. Имеется список студентов МСФ, для каждого студента

07/22/2023

Романькова Т.Л.

Пример. Имеется список студентов МСФ, для каждого студента известен рост.

Составить список студентов выше 180 см для формирования баскетбольной команды.

Обозначим
St – одномерный массив из строк, элементами которого являются фамилии студентов.
Rost - одномерный массив целых чисел, элементами которого являются соответствующие ростовые показатели студентов.
N – количество студентов.
B – одномерный массив строк, содержащий фамилии студентов из баскетбольной команды.
I – номер студента в списке.
J – количество студентов в баскетбольной команде.

Слайд 55

07/22/2023 Романькова Т.Л. начало Ввод n, St, Rost j = 0

07/22/2023

Романькова Т.Л.

начало

Ввод n, St, Rost

j = 0

i = 1

i≤n

да

нет

Rost[i]≥180

да

нет

j = j+1

B[j]

= St[i]

i = i+1

Слайд 56

07/22/2023 Романькова Т.Л. j >0 да нет Вывод B Вывод сообщения конец

07/22/2023

Романькова Т.Л.

j >0

да

нет

Вывод B

Вывод
сообщения

конец

Слайд 57

07/22/2023 Романькова Т.Л. StringGrid3 StringGrid1 StringGrid2 Label2

07/22/2023

Романькова Т.Л.

StringGrid3

StringGrid1

StringGrid2

Label2

Слайд 58

07/22/2023 Романькова Т.Л. Для компонентов Label2 и StringGrid3 установим для свойства

07/22/2023

Романькова Т.Л.

Для компонентов Label2 и StringGrid3 установим для свойства Visible значение

False, чтобы до нажатия кнопки они не отражались в окне программы.

Чтобы при изменении количества студентов автоматически изменялось бы количество строк в таблицах StringGrid1 и StringGrid2, создадим процедуру:

procedure TForm1.Edit1Change(Sender: TObject);
begin
if edit1.text<>'' then
Begin
stringgrid1.RowCount:=StrToInt(edit1.text);
stringgrid2.RowCount:=StrToInt(edit1.text)
end
end;

Слайд 59

07/22/2023 Романькова Т.Л. Текст процедуры обработки события нажатия кнопки: procedure TForm1.Button1Click(Sender:

07/22/2023

Романькова Т.Л.

Текст процедуры обработки события нажатия кнопки:

procedure TForm1.Button1Click(Sender: TObject);
var
i,n,j:integer;
Rost:array[1..20]

of integer;
St,B:array[1..20] of string;

Begin
{Ввод исходных данных}
n:=strtoint(edit1.Text);
for i:=1 to n do
st[i]:=stringgrid1.Cells[0,i-1];
for i:=1 to n do
rost[i]:=strtoint(stringgrid2.Cells[0,i-1]);

Слайд 60

07/22/2023 Романькова Т.Л. {Формирование нового массива} j:=0; for i:=1 to n

07/22/2023

Романькова Т.Л.

{Формирование нового массива}
j:=0;
for i:=1 to n do

if Rost[i]>180 then
begin
j:=j+1;
B[j]:=st[i]
end;

{Вывод результата}
if j>0 then
begin
label2.Visible:=true;stringgrid3.Visible:=true;
stringgrid3.RowCount:= j;
for i:=1 to j do
stringgrid3.Cells[0,i-1]:=b[i];
end

else
ShowMessage('На МСФ нет студентов для баскетб. команды!');
end;

Слайд 61

07/22/2023 Романькова Т.Л. Пример. Заданы два одномерных массива целых чисел. Сформировать

07/22/2023

Романькова Т.Л.

Пример. Заданы два одномерных массива целых чисел. Сформировать новый массив

из элементов первого массива, превышающих значение минимального элемента второго массива, и элементов второго массива с четными номерами.

Введем следующие обозначения:

n1 - размерность 1-го массива;

a – 1-й исходный массив;

i - номер текущего элемента массива;

Min - значение минимального элемента 2-го массива;

n2 - размерность 2-го массива;

b – 2-й исходный массив;

Слайд 62

07/22/2023 Романькова Т.Л. j - размерность нового массива; с – полученный массив;

07/22/2023

Романькова Т.Л.

j - размерность нового массива;

с – полученный массив;

Слайд 63

07/22/2023 Романькова Т.Л. да нет да нет А

07/22/2023

Романькова Т.Л.

да

нет

да

нет

А

Слайд 64

07/22/2023 Романькова Т.Л. А j = 0 i = 1 i≤n1

07/22/2023

Романькова Т.Л.

А

j = 0

i = 1

i≤n1

да

нет

a[i]>Min

да

нет

j = j+1

c[j] = a[i]

i =

i+1

B

Слайд 65

07/22/2023 Романькова Т.Л. B i = 2 i≤n2 да нет j

07/22/2023

Романькова Т.Л.

B

i = 2

i≤n2

да

нет

j = j+1

c[j] = b[i]

i = i+2

C

Слайд 66

07/22/2023 Романькова Т.Л. j >0 да нет Вывод c Вывод сообщения конец C

07/22/2023

Романькова Т.Л.

j >0

да

нет

Вывод c

Вывод
сообщения

конец

C

Слайд 67

07/22/2023 Романькова Т.Л. procedure TForm1.Button1Click(Sender: TObject); var i,n1,n2,j,Min:integer; a,b:array[1..20] of integer;

07/22/2023

Романькова Т.Л.

procedure TForm1.Button1Click(Sender: TObject);
var
i,n1,n2,j,Min:integer;
a,b:array[1..20] of integer;
c:array[1..40] of integer;

begin

n1:=strtoint(edit1.Text);
n2:=strtoint(edit2.Text);
for i:=1 to n1 do
a[i]:=strtoint(stringgrid1.Cells[0,i-1]);
for i:=1 to n2 do
b[i]:=strtoint(stringgrid2.Cells[0,i-1]);
Слайд 68

07/22/2023 Романькова Т.Л. min:=b[1]; for i:=2 to n2 do if b[i]

07/22/2023

Романькова Т.Л.

min:=b[1];
for i:=2 to n2 do
if b[i]< min then

min:=b[i];

j:=0;
for i:=1 to n1 do
if a[i]>min then
begin
j:=j+1;
c[j]:=a[i]
end;

Слайд 69

07/22/2023 Романькова Т.Л. i:=2; while i begin j:=j+1; c[j]:=b[i]; i:=i+2 end;

07/22/2023

Романькова Т.Л.

i:=2;
while i<=n2 do
begin
j:=j+1;
c[j]:=b[i];
i:=i+2
end;

if j>0

then
begin
label2.Visible:=true;
stringgrid3.Visible:=true;
stringgrid3.RowCount:= j;
for i:=1 to j do
stringgrid3.Cells[0,i-1]:=IntToStr(c[i]);
end
Слайд 70

07/22/2023 Романькова Т.Л. else ShowMessage('Массив не сформирован !') end; Фокус ввода

07/22/2023

Романькова Т.Л.

else
ShowMessage('Массив не сформирован !')
end;

Фокус ввода

На форме может располагаться несколько

компонентов, которые могут использовать клавиатуру. Например, Edit, Memo, Button, StringGrid.
Чтобы передать компоненту клавиатурный ввод, нужно передать ему фокус ввода с помощью метода
SetFocus