Ввод массива в среде Делфи

Автор: Пользователь скрыл имя, 20 Марта 2012 в 19:42, реферат

Описание работы

Поиск минимального (максимального) элемента массива. Поиск заданного элемента в массиве. Сортировка массива.

Работа содержит 1 файл

Ввод массива.docx

— 17.90 Кб (Скачать)

[7]

Ввод массива

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

Давайте сейчас этим и займемся. Поставьте на Вашу форму кнопку Button и поле редактирования Edit.

Заголовок нашей функции  будет такой:

function GetSubStr(st:string; expl:string; n:integer):string;

где

st - строка, содержащая массив expl - строка разделитель n - номер  подстроки 

function TForm1.GetSubStr(st:string; expl:string ;n:integer):string;

Var p,i:integer;

Begin

for i:= 1 to n-1 do

begin

  p:=pos(expl,st);

  st:=copy(st,p+1,Length(st)-p);

  while (pos(expl,st)=1) and (length(st)>0) do

   delete(st,1,1);

end;

p:=pos(expl,st);

if p<>0 then result:=copy(st,1,p-1)

else result:=st;

 

End;

Для получения n-ой подстроки (элемента массива) из полученной в  качестве аргумента строки функция  сначала удаляет предшествующую ей n-1 подстроку (цикл for), затем находит  разделитель, который обозначает конец  нужной подстроки, выделяет подстроку  и возвращает ее в качестве значения функции (через свое имя).

Не забудьте добавить заголовок  нашей функции в раздел Public модуля программы.

Теперь для проверки работы нашей функции напишем обработчик события OnClick, для нашей кнопки. В начале мы с помощью нашей функции получим массив из Edit1, а потом выведем его:

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

a:array[1..10] of string[10];

st:string;

begin

for i:=1 to 10 do

a[i]:=GetSubStr(Edit1.text,' ',i);//используем пробел в

качестве разделителя

 

for i:=1 to 10 do

st:=st+IntTostr(i)+' '+a[i]+#13;

ShowMessage(st);

end;

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

Будем искать минимальный  элемент в целочисленном массиве. Для этого немного изменим  обработчик события OnClick для кнопки:

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;//номер элемента, сравниваемого  с минимальным

a:array[1..10] of integer;

min:integer;//номер минимального элемента

 

begin

//Введем массив

for i:=1 to 10 do

//Преобразуем полученные подстроки  в числа

a[i]:=StrToInt(GetSubStr(Edit1.text,' ',i));//используем  пробел в качестве разделителя

//Найдем минимальный элемент

min:=1; //пусть номер минимального  элемента = 1

for i:= 2 to 10 do // начнем искать со  следующего 

 if a[i] < a[min] then min:=i;

Form1.caption:=IntToStr(a[min]); // выводим в заголовок

формы минимальный элемент

end;

В этом примере a[min] минимальный элемент массива, а min - номер минимального элемента. Алгоритм очень простой: сравниваем каждый следующий элемент с минимальным, если он меньше минимального, то запоминаем его номер в переменной min, и продолжаем сравнивать уже с ним.

Чтобы найти максимальный элемент, нужно изменить всего одну строку:

>>>

if a[i] < a[min] then min:=i;

Надо заменить на:

if a[i] > a[min] then min:=i;

Только теперь a[min] - максимальный элемент, а min - номер максимального элемента.

Поиск заданного  элемента в массиве

Поступим методом простого перебора. Для этого будем перебирать все элементы массива, пока не встретим искомый элемент, или пока не дойдем до конца массива.

Элемент, совпадение с которым  нам надо найти будем хранить  в текстовом поле Edit2. Обработчик события OnClick нашей кнопки будет иметь такой вид:

procedure TForm1.Button1Click(Sender: TObject);

var i:integer;

a:array[1..10] of integer;

n:integer;//образец

found:boolean;

 

begin

//Введем массив

for i:=1 to 10 do

//Преобразуем полученные подстроки  в числа

a[i]:=StrToInt(GetSubStr(Edit1.text,' ',i));//используем  пробел в качестве разделителя

 

 

n:=StrToInt(Edit2.text);

found:=false;

i:=1;

REPEAT

if a[i] = n then found:=true

else i:=i+1;

UNTIL (i > 10) or (found = true);

if found then showmessage('Совпадение с элементом номер '+IntToStr(i));

end;

Сортировка массива

Вот мы и дошли до самого интересного - до сортировки массива. Рассмотрим алгоритм т.н. прямого выбора. Смысл  его заключается в следующем:

Просматривая массив от первого  элемента, найдем минимальный элемент  и поместим его на место первого  элемента, а первый элемент - на место  минимального.

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

Алгоритм ясен, теперь приступим  к написанию кода. Все тот же обработчик события OnClick принимает  теперь такой вид:

procedure TForm1.Button1Click(Sender: TObject);

var i,k,j,min:integer;

buf:integer; // буфер для обмена

a:array[1..10] of integer;

st:string;

begin

//введем массив

for i:=1 to 10 do

a[i]:=StrToInt(GetSubStr(Edit1.text,' ',i));//используем  пробел в качестве разделителя

 

for i:=1 to 10 - 1 do // кол-во элементов  минус один

begin

//поищем минимальный элемент

  min:=i;

  for j:=i+1 to 10 do

   if a[j] < a[min] then min:=j;

//поменяем местами

  buf:=a[i];

  a[i]:=a[min];

  a[min]:=buf;

end;

 

for k:=1 to 10 do

Form1.Caption:=Form1.caption + ' '+ IntToStr(a[k]);

end;


Информация о работе Ввод массива в среде Делфи