Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

ExCode.ru - программирование на высоком уровне - выпуск 19


Информационный Канал Subscribe.Ru

ExCode.ru - программирование на высоком уровне
Выпуск №19 ( 2005.12.03 )
Здравствуйте, уважаемые подписчики!

Хочу напомнить, что конкурс на нашем сайте продолжается. Пока участников не так много, поэтому у них большие шансы на выигрышь. Составьте им конкуренцию и выиграйте 2 DVD диска "Все для программиста 1,2". Подробнее о конкурсе вы можете узнать на нашем сайте ExCode.ru


Новости копьютерного мира:
2005-11-29    Отныне создать свою доменную зону может каждый
Традиционные доменные зоны постепенно истощаются, в них всё сложнее и сложнее найти незанятое красивое имя. Радикальное решение этой проблемы предложила амстердамская компания Unified Root. Теперь каждый может создать собственную зону и назвать её как угодно - например, присвоить ей имя любимой собачки, или собственную фамилию.

2005-11-29    Microsoft выпустила техническую бета-версию Microsoft Office 12
Корпорация Microsoft объявила о выпуске первой бета-версии нового пакета Microsoft Office, имеющего кодовое название Office 12. Первое бета-тестирование является закрытым и в нем принимают участие только отобранные заказчики и партнеры. Эта техническая бета-версия является важным этапом на пути к выпуску следующей версией Microsoft Office System, запланированному на вторую половину 2006 года.

2005-11-29    Популярность "кейлоггеров" взлетает на глазах
Среди популярных инструментов, используемых хакерами и интернет-жуликами всех мастей на лидирующие позиции выбираются так называемые "кейлоггеры" - программы, способные отслеживать нажатые пользователем клавиши и высылать собранную информацию по заданному адресу.

2005-11-28    Microsoft заручается поддержкой антифишинговых сервисов
Компания Cyota, работающая в сфере интернет-безопасности, предоставит Microsoft доступ к собственной системе обнаружения мошеннических и поддельных сайтов.

2005-11-29    Патент на формат JPEG может быть отменен
Организация публичных патентов PUBPAT (Public Patent Foundation) обратилась в патентное бюро США и бюро торговых марок с просьбой отменить патент, зарегистрированный компанией Forgent Networks на технологию сжатия графических данных JPEG.

2005-11-28    Google Print переименовали в Google Book Search
Лидер поискового рынка, компания Google, переименовала свой сервис Google Print в менее "устрашающий" для издателей Google Book Search.

2005-11-29    Выставка CeBIT конкурирует с IFA
Выставка CeBIT намерена расширить охват тем своей ежегодной экспозиции технологических новшеств и достижений.

2005-12-01    Новый сервис — mp3 в сахаре
В Рунете появился новый сервис по продаже музыкальных файлов — mp3 Sugar. На сайте уже можно скачать более 250 тысяч песен общим объемом свыше 1700 гигабайт.

2005-11-29    Gartner обнародовала рецепт борьбы с DRM
Технология защиты цифровых прав от Sony, оказавшаяся недавно в центре скандала не столь уж совершенна и навязчива, как может показаться.

2005-11-29    Проект SETI@home умрет 15 декабря
Проект SETI@home (здесь) - научный некоммерческий проект, использующий свободные ресурсы на компьютeрах добровольцев для поиска внеземного разума, будет официально закрыт 15 декабря. Тогда же он окончательно будет переформирован в "Berkeley Open Infrastructure for Network Computing", или просто - BOINC.

Статья номера:

Работа с массивами в Delphi


Автор: Михаил Христосенко
Источник: http://www.delphid.dax.ru

Очень был удивлен когда к нам поступила просьба рассказать о массивах и о их сортировке в Delphi. Но раз уж поступила просьба, а сайт наш призван помочь в освоении Delphi, то я решил написать эту статью, в которой расскажу Вам о возможных действиях с массивами в Delphi. При этом мы напишем несколько пользовательских функций, которые будут помогать нам в дальнейшем при работе с массивами.
Ввод массива

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

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


Ну вот мы и познакомились с самыми типичными действиями с массивами. Надеюсь эта статья оказалась Вам хоть немного полезной :)


Новые статьи на сайте ExCode.ru:
НазваниеРаздел
Random or "Счастливый случай"Delphi/Pascal » Общие
Работа с файламиDelphi/Pascal » Общие
Работа с файлами 2Delphi/Pascal » Общие
Глобальные объекты в Дельфи. Их свойства и методы.Delphi/Pascal » Общие
Работа с INI файламиDelphi/Pascal » Общие
Обертки для TListDelphi/Pascal » Общие
Строки изнутриDelphi/Pascal » Общие
Полет над строкойDelphi/Pascal » Общие
Массивы. Статические или динамическиеDelphi/Pascal » Общие
Динамические структуры данныхDelphi/Pascal » Общие
Сохраняем записи в потокеDelphi/Pascal » Общие
Системы счисления: из одной в другуюDelphi/Pascal » Общие
Чудеса TStringList. Почему надо использовать объекты TStringList вездеDelphi/Pascal » Общие
Копирование и удаление файлов в DelphiDelphi/Pascal » Общие
Массив из элементов - как с ним бороться или как с ним дружитьDelphi/Pascal » Общие
Работа с массивами в DelphiDelphi/Pascal » Общие
Методы сортировки массивовDelphi/Pascal » Общие
Использование драйвера ASCII для файлов с разделительной запятойDelphi/Pascal » Базы данных
Архитектура BDE и его особенности при работе с SQL-серверами 2Delphi/Pascal » Базы данных
Архитектура BDE и его особенности при работе с SQL-серверами 1Delphi/Pascal » Базы данных
Из Paradox в Access при помощи ADODelphi/Pascal » Базы данных
Delphi и базы данных "Поисковые поля" и SQL запросыDelphi/Pascal » Базы данных
Создание БД, работа с компонентами для БД и узнаем кое-что о SQLDelphi/Pascal » Базы данных
Базы данных с нуля: Визуальные компоненты для DBDelphi/Pascal » Базы данных
Базы данных с нуля: Первая программа с базами данныхDelphi/Pascal » Базы данных
Базы данных с нуля: Реляционные базы данныхDelphi/Pascal » Базы данных
Базы данных с нуля: Что такое базы данных ?Delphi/Pascal » Базы данных
Ведущий рассылки: LedWorm
© ExCode.ru 2005

Subscribe.Ru
Поддержка подписчиков
Другие рассылки этой тематики
Другие рассылки этого автора
Подписан адрес:
Код этой рассылки: comp.soft.prog.excode
Архив рассылки
Отписаться
Вспомнить пароль

В избранное