Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 24.09.2008, 10:01
Аватар для Сёна
Сёна Сёна вне форума
Прохожий
 
Регистрация: 02.05.2007
Адрес: Москва
Сообщения: 42
Версия Delphi: 7
Репутация: 10
По умолчанию 2 последовательности чисел

Подскажите пожалуйста...
есть 2 последовательности положительных целых чисел, их размеры могут совпадать а могут и нет...
например
1. 23 25 36 45
2. 18 20 31
нужно из этих последовательностей выбрать пары чисел, коорые будут удовлетворять условию например числа разность которых не превышает 5. причем значения из одной или второй последовательности могут встречаться в паре лишь один раз..
как это можно реализовать? если через массив, то как будет происходить сравнение если они разные по длине?
или может через множество??? но как тогда добиться того чтобы значения встречались лишь один раз?
заранее благодарна...
Ответить с цитированием
  #2  
Старый 24.09.2008, 11:18
Аватар для Aristarh Dark
Aristarh Dark Aristarh Dark вне форума
Модератор
 
Регистрация: 07.10.2005
Адрес: Москва
Сообщения: 2,906
Версия Delphi: Delphi XE
Репутация: выкл
По умолчанию

2 массива, вложенный цикл, числа которые попали в пару заменяешь на -1 чтобы повторно не использовать - все решение.
__________________
Некоторые программисты настолько ленивы, что сразу пишут рабочий код.

Если вас наказали ни за что - радуйтесь: вы ни в чем не виноваты.
Ответить с цитированием
  #3  
Старый 24.09.2008, 12:24
Аватар для Сёна
Сёна Сёна вне форума
Прохожий
 
Регистрация: 02.05.2007
Адрес: Москва
Сообщения: 42
Версия Delphi: 7
Репутация: 10
По умолчанию

спасибо : )
Ответить с цитированием
  #4  
Старый 26.09.2008, 11:25
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Отброшу сейчас рассмотрение типа данных (приведу пример StringGrid для наглядности) - можно использовать динамические массивы, а также будем считать последовательности упорядоченными. Тогда я бы делал один цикл, но в нём прогонял 2 индекса массивов (даже три, если учитывать массив результата) параллельно.
Код:
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

var
  bEnd: Boolean = false;
  i:    Integer = 1;
  j:    Integer = 1;
  k:    Integer = 1;
  A, B: Integer;
  maxI: Integer = 4;
  maxj: Integer = 3;

procedure TForm1.FormCreate(Sender: TObject);
begin
  StringGrid1.Cells[1,1]:= '23';
  StringGrid1.Cells[1,2]:= '25';
  StringGrid1.Cells[1,3]:= '36';
  StringGrid1.Cells[1,4]:= '45';
  StringGrid1.Cells[2,1]:= '18';
  StringGrid1.Cells[2,2]:= '20';
  StringGrid1.Cells[2,3]:= '31';
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  while not bEnd do
  begin
    A:= StrToInt(StringGrid1.Cells[1, i]);
    B:= StrToInt(StringGrid1.Cells[2, j]);
    if (Abs(A - B) <= 5) then
    begin         // i++, j++, k++
      StringGrid1.Cells[3, k]:= IntToStr(A);
      StringGrid1.Cells[4, k]:= IntToStr(B);
      Inc(k);
      if (i = maxI) or (j = maxJ) then
        bEnd:= true
      else
      begin
        Inc(i); Inc(j);
      end
    end
    else if (A < B) then
    begin         // i++
      if i = maxI then
        bEnd:= true
      else
        Inc(i);
      end
    else
    begin         // j++
      if j = maxJ then
        bEnd:= true
    else
      Inc(j);
    end;
  end;
end;

end.

Последний раз редактировалось AlexSku, 26.09.2008 в 11:29.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 12:17.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter