Исходники Delphi

Добро пожаловать на наш портал

На нашем сайте ежедневно публикуются десятки качественных и свежих материалов, которые Вы можете скачать абсолютно бесплатно. Рекомендуем Вам добавить Наш сайт в закладки, а также подписаться на RSS ленту, чтобы не пропускать интересных новостей.
Стартовая Избранное Главная Контакты Карта сайта

Меню

Не доступно

Не доступно

Опрос

Оцените мой сайт

Проголосовало: 118
Другие опросы

Главная » 2013 » Февраль » 17 » Массивы
15:59
Массивы
Ввод массива 

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

Давайте сейчас этим и займемся. Поставьте на Вашу форму кнопку 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;

Ну вот мы и познакомились с самыми типичными действиями с массивами. Надеюсь эта статья оказалась Вам хоть немного полезной smile
Категория: Для новачка | Просмотров: 895 | Добавил: Reif | Теги: Для новачка | Рейтинг: 0.0/0
Всего комментариев: 0


Название блока

Здесь html код

Название блока

Здесь html код

Название блока

Здесь html код

Название блока

Здесь html код

 
Исходники Delphi
Сделать бесплатный сайт с uCoz |