Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Указатели 
:(
    Опции темы
Garabar
Дата 9.9.2005, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 15.9.2004

Репутация: нет
Всего: 1



Дравствуйте уважаемые люди.
Никак не могу справица с одной достаточно простой задачкой, синтакс не догоняю видимо, короче нужно следующее:
Есть некий массив, и нужно элементы этого массива поменять местами(попарно), дык вот, как наиболее быстро с точки зрения компа энто сделать, хотел через указатели но чето ламоват я видно пака, поскажите люди добрые во блага науки и техники..
Спасибо
PM MAIL   Вверх
_hunter
Дата 9.9.2005, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 15
Всего: 98



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


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Guest
Дата 9.9.2005, 21:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата(_hunter @ 9.9.2005, 16:18)
указатели перестановку двух элементов не заоптимизируют

А можно ли поменять адреса к элементам массивов местами?

  Вверх
Snowy
Дата 9.9.2005, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 11363
Регистрация: 13.10.2004
Где: Питер

Репутация: 192
Всего: 484



Цитата(Guest @ 9.9.2005, 21:31)
А можно ли поменять адреса к элементам массивов местами?

Адреса у указателей можно.
Но данные останутся на тех же местах -> массив это не изменит.
PM MAIL   Вверх
Girder
Дата 10.9.2005, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Массив данных трогать... на надо smile

Надо индексы(указатели) перегруперовать или накладывать новую таблицу индексов(указатель). Если нет необходимости оставлять изначальную последовательность индексации... то быстрее будет перегруперовать.


--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
Garabar
Дата 13.9.2005, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 224
Регистрация: 15.9.2004

Репутация: нет
Всего: 1



Цитата(Girder @ 10.9.2005, 00:34)
Надо индексы(указатели) перегруперовать или накладывать новую таблицу индексов(указатель). Если нет необходимости оставлять изначальную последовательность индексации... то быстрее будет перегруперовать


А можно пример кода пожалста...

PM MAIL   Вверх
Girder
Дата 14.9.2005, 03:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 31
Всего: 155



Код
//некий массив данных
const
 Str:string=('X'+#0+'XX'+#0+'XXX'+#0+'XXXX'+#0+'XXXXX'+#0);

procedure TForm1.Button1Click(Sender: TObject);
var j,i:integer;
    i1,i2:array [1..5] of PChar;
    p:PChar;
begin
 Memo1.Clear;
 i1[1]:=PChar(@Str[1]);
//Накладываем первичную таблицу.
 i:=2;
 for j:=1 to Length(Str)-1 do
  if Str[j]=#0 then
   begin
    i1[i]:=PChar(@Str[j+1]);
    inc(i);
   end;
//Выводим результат по первичной таблице
 for j:=1 to 5 do Memo1.Lines.Add(i1[j]);
//Перегрупперовываем первичную таблицу
 i:=1;
 j:=5;
 repeat
  p:=i1[i];
  i1[i]:=i1[j];
  i1[j]:=p;
  inc(i);
  dec(j);
 until (j=i);
//Выводим результат по первичной таблице
 for j:=1 to 5 do Memo1.Lines.Add(i1[j]);
//Накладываем вторуй таблицу исходя из указателей в первичной таблице
 for j:=1 to 5 do i2[j]:=i1[6-j];
//Выводим результат по второй таблице
 for j:=1 to 5 do Memo1.Lines.Add(i2[j]);
//Накладываем вторичную таблицу индексов на вторую таблицу
 for j:=1 to 5 do i3[j]:=6-j;
//Выводим результат по вторичной таблице
 for j:=1 to 5 do Memo1.Lines.Add(i2[i3[j]]);
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0549 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.