- •5.2.5. Линейка Dialogs
- •5.4. Пример «Перевод в двоичную систему счисления»
- •Глава 6. Структурные типы данных
- •6.1. Совместимость типов
- •6.2. Массивы
- •6.2.1. Статические массивы
- •6.2.2. Физическая структура
- •6.2.3. Операции
- •6.2.4. Компоненты grid
- •6.2.5. Пример 1: умножение матрицы на строку
- •6.2.6. Динамические массивы
- •6.2.7. Пример 2. Неповторяющиеся элементы массива
6.2.7. Пример 2. Неповторяющиеся элементы массива
Даны целые числа, среди которых могут быть повторяющиеся. Составить новый массив из неповторяющихся чисел.
Создадим новый проект и запишем его в отдельную папку. На форму выставим следующие компоненты: таблицу StringGridFirst для ввода элементов массива; таблицу StringGridLast для вывода искомого массива; кнопку BitBtnAdd для добавления новых строк; кнопку BitBtnDelete для удаления строк; кнопку BitBtnArray для создания искомого массива; кнопку BitBtnClose для завершения работы проекта (рис. 6.5).
Д
Рис.
6.5
procedure TFormMain.BitBtnCloseClick(Sender: TObject);
begin
Close;
end;
Для кнопки BitBtnAdd создадим обработчик события onClick:
procedure TFormMain.BitBtnAddClick(Sender: TObject);
begin
with StringGridFirst do
RowCount:=RowCount+1;
end;
Для кнопки BitBtnDelete создадим обработчик события onClick:
procedure TFormMain.BitBtnDeleteClick(Sender: TObject);
var
i,j: integer;
begin
with StringGridFirst do
begin
for i:=Row+1 to RowCount-1 do
for j:=0 to ColCount-1 do Cells[j,i-1]:=Cells[j,i];
RowCount:=RowCount-1;
end;
end;
И, наконец, для кнопки BitBtnArray создадим обработчик:
procedure TFormMain.BitBtnArrayClick(Sender: TObject);
var
Ar : array of integer; // динамический массив
i,L,Code: integer;
x : integer;
Err : boolean;
function Test(x: integer): boolean;
// проверка: х не входит в массив
var
i: integer;
begin
i:=-1; Result:=false;
while (i<L-1) and not Result do
begin
Inc(i); Result := x=Ar[i];
end;
end;
begin
Err:=false;
with StringGridFirst do
begin
L:=0;
for i:=1 to RowCount-1 do
begin
Val(Cells[1,i],x,Code); // преобразуем: строка в число
if Code<>0 then // превращение не удалось
begin
ShowMessage('Ошибка в строке '+IntToStr(i));
Err:=true; Break; // выходим из цикла
end;
if not Test(x) then // проверяем: число не входит в Ar
begin // добавляем в массив
Inc(L); SetLength(Ar,L);
Ar[L-1]:=x;
end;
end;
end;
if not Err then // если нет ошибки, формируем таблицу
with StringGridLast do
begin
RowCount:=L+1;
for i:=0 to L-1 do Cells[1,i+1]:=IntToStr(Ar[i]);
end;
end;