Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.05.2008, 22:49   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Какой самый быстрый метод заполнения массива, например двухмерного?

Какой самый быстрый метод заполнения массива, например, двухмерного? Если можно практический пример. В Инете нашел метод заполнения по спирали, но на делфи не нашел исходников. подскажите это действительно быстрее стандарных процедур цикла и как можно реализовать его? Спасибо!
SkAndrew вне форума Ответить с цитированием
Старый 28.05.2008, 23:49   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

0_о

Ну и вопросик..... вообщето по спирали есть коды у нас на форуме.... Видел лично....

Компьютеру по барабану по спирали, рожком, в шахматном порядке заполнять... Главное чтоб меньше циклов.....
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 28.05.2008, 23:49   #3
SunKnight
Участник клуба Подтвердите свой е-майл
 
Аватар для SunKnight
 
Регистрация: 14.12.2007
Сообщений: 1,434
По умолчанию

Самым быстрым и оптимизированным будет такой метод:

MAS[1,1]:=1;
MAS[1,2]:=2;
MAS[1,3]:=3;
......
MAS[n,m]:=?;
Проповедую design patterns, верую в MVC, доверяю eXtrime programming.
SunKnight вне форума Ответить с цитированием
Старый 28.05.2008, 23:51   #4
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

спасибо, но хотелось бы понять все какой цикл быстрее и какой способ быстрее. можно пример? спасибо
SkAndrew вне форума Ответить с цитированием
Старый 28.05.2008, 23:59   #5
DelphiLab
Пользователь
 
Регистрация: 07.05.2007
Сообщений: 18
По умолчанию

Заполнить чем?
Код:
  FillChar(mas[0], Length(mas) * SizeOf(mas[0]), 0);
Для двумерного
Код:
  FillChar(mas[0], Length(mas) * Length(mas[0]) * SizeOf(mas[0,0]), 0);
Для трёхмерного
Код:
  FillChar(mas[0], Length(mas) * Length(mas[0]) * Length(mas[0, 0]) * SizeOf(mas[0,0,0]), 0);
и т.д.
Заполняет массив нулями

Последний раз редактировалось DelphiLab; 29.05.2008 в 00:05.
DelphiLab вне форума Ответить с цитированием
Старый 29.05.2008, 00:01   #6
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

спасибо, например, числами или символами
SkAndrew вне форума Ответить с цитированием
Старый 29.05.2008, 00:07   #7
DelphiLab
Пользователь
 
Регистрация: 07.05.2007
Сообщений: 18
По умолчанию

Но ты же должен их откуда-то брать
DelphiLab вне форума Ответить с цитированием
Старый 29.05.2008, 00:18   #8
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

а если не нулями для двухмерного как тогда будет выглядеть код

FillChar(mas[0], Length(mas) * Length(mas[0]) * SizeOf(mas[0,0]), 0);

и mas - это двухмерный массив, как он объявляется? спасибо

допустим нужно так

mas : array of widestring

Последний раз редактировалось Stilet; 29.05.2008 в 08:32.
SkAndrew вне форума Ответить с цитированием
Старый 29.05.2008, 08:43   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

НА мой взгляд самый быстрый способ это вот этот:
Код:
a:array[1..10,1..20] of char;
      c:char;
..............
begin
 c:='q';
 asm
  xor eax,eax
  mov al,[c];
  mov ecx,200;
  mov edi, offset a
  rep stosb
 end;
end;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 29.05.2008, 12:15   #10
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

Очень интересное решение, только вот знаний ассемблера у меня никаких (можно пояснить каждую строчку?), а как это будет выглядеть при такой конструкции:

const a:array[0..10, 0..10] of widechar = ((символы юникода от 0 до 9), ..., (символы юникода от 0 до 9));

Спасибо!
SkAndrew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сортировка строк двухмерного массива EfiopianDIMON Общие вопросы C/C++ 9 26.05.2009 22:52
Передача двухмерного массива в функцию IgorKr Общие вопросы C/C++ 2 28.03.2008 01:11
Ввод двухмерного массива в Делфи через StringGrid KIRILL_FR Помощь студентам 2 24.02.2008 18:03
Какой самый нормальный инсталлятор? 3lander Помощь студентам 3 28.12.2007 22:51
Предложите самый быстрый алгоритм! Gambler Общие вопросы Delphi 6 26.12.2006 22:44