Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекция 7.doc
Скачиваний:
3
Добавлен:
21.11.2019
Размер:
198.14 Кб
Скачать

6.2.7. Пример 2. Неповторяющиеся элементы массива

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

Создадим новый проект и запишем его в отдельную папку. На форму выставим следующие компоненты: таблицу StringGridFirst для ввода элементов массива; таблицу StringGridLast для вывода искомого массива; кнопку BitBtnAdd для добавления новых строк; кнопку BitBtnDelete для удаления строк; кнопку BitBtnArray для создания искомого массива; кнопку BitBtnClose для завершения работы проекта (рис. 6.5).

Д

Рис. 6.5

ля кнопки BitBtnClose создадим обработчик события onClick:

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;