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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2008, 11:35   #1
Ganmaker
Пользователь
 
Аватар для Ganmaker
 
Регистрация: 05.11.2008
Сообщений: 22
По умолчанию оптимизация для меньшения времени выполнения

доброго всем времени суток.
Программа бесцельно выполняет арифметические действия (+,-,/,*) в циклах, как их можно заменить для ускорения работы.
Кроме того как правильно организовать циклы - вложенные должны быть меньше или наоборот.
И ещё, что лучше использовать, массивы типа record, или многомерные массивы.
Заранее благодарен, код писать не надо, думаю справлюсь сам, достаточно только советов.
Ganmaker вне форума Ответить с цитированием
Старый 19.11.2008, 12:04   #2
Викдон
Форумчанин
 
Аватар для Викдон
 
Регистрация: 11.11.2008
Сообщений: 161
По умолчанию

В массивах типа record могут содержаться поля разных типов, а в многомерных массивах элементы одного типа.
Викдон вне форума Ответить с цитированием
Старый 19.11.2008, 14:17   #3
Ganmaker
Пользователь
 
Аватар для Ganmaker
 
Регистрация: 05.11.2008
Сообщений: 22
По умолчанию

я имел ввиду, что быстрее выполняется, например 2-х мерный массив типа integer или одномерный типа record
Ganmaker вне форума Ответить с цитированием
Старый 19.11.2008, 17:33   #4
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,551
По умолчанию

Смотря как к нему обращаться.
Вот, простой пример (Делфи):
Код:
type TMassiv = array[0..9999,0..9999] of Integer;
var Mas: TMassiv;

procedure TForm1.Button1Click(Sender: TObject);
var I, J, T: Integer;
begin
  Randomize;
  T := GetTickCount;
  for I := 0 to 9999 do
    for J := 0 to 9999 do
      Mas[I,J] := Random (1000);
  ShowMessage (IntToStr (GetTickCount - T));
end;
На моем компе обработчик выполнился за 1 сек.
Меняем индексы местами:
Код:
type TMassiv = array[0..9999,0..9999] of Integer;
var Mas: TMassiv;

procedure TForm1.Button1Click(Sender: TObject);
var I, J, T: Integer;
begin
  Randomize;
  T := GetTickCount;
  for J := 0 to 9999 do
    for I := 0 to 9999 do
      Mas[I,J] := Random (1000);
  ShowMessage (IntToStr (GetTickCount - T));
end;
А этот код (который, по сути, делает тоже самое) выполнился за 10 сек.
Arigato вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
label для отображения общего времени трека blackstersl Компоненты Delphi 4 09.09.2008 20:07
Проблема выполнения запроса Рустам PHP 2 31.05.2008 15:15
Оптимизация Terran Общие вопросы Delphi 3 03.05.2008 19:03
Приостановка цикла для выполнения внешней программы Uomo Общие вопросы Delphi 3 04.04.2008 11:48
Как замерить время выполнения программы Gracel Общие вопросы Delphi 5 12.06.2007 22:16