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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2016, 23:46   #1
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию Мерился с крестами православными)))

Опять на работе забились))) Холодильник от Братьев Пилотов. Пишем усложненный аналог. На Делфе потратил минут 35-40. Осталась проблема с оптимизацией - можно ли эти два цикла вписать в одну процедуру? Ифы не предлагать))) Минай, озари)))
Код:
  for i:= 1 to 4 do
  begin
  if not rev then
  if i = b then Continue;
  if (ind[a,i] = 3) or (ind[a,i] = 7) then
  ind[a,i]:= step - 1;
  ima[a, i].Picture.Assign(mass[ind[a,i] + 1]);
  ind[a,i]:= ind[a,i] + 1;
  end;

  for i:= 1 to 4 do
  begin
  if not rev then
  if i = a then Continue;
  if (ind[i,b] = 3) or (ind[i,b] = 7) then
  ind[i,b]:= step - 1;
  ima[i,b].Picture.Assign(mass[ind[i,b] + 1]);
  ind[i,b]:= ind[i,b] + 1;
  end;
Iron Monk вне форума Ответить с цитированием
Старый 26.02.2016, 00:11   #2
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так, что ли?
Код:
  for i:= 1 to 4 do begin
    if rev or (i <> b) then begin
      if (ind[a,i] = 3) or (ind[a,i] = 7) then ind[a,i]:= step - 1;
      ima[a, i].Picture.Assign(mass[ind[a,i] + 1]);
      ind[a,i]:= ind[a,i] + 1;
    end;
    if rev or (i <> a) then begin
      if (ind[i,b] = 3) or (ind[i,b] = 7) then ind[i,b]:= step - 1;
      ima[i,b].Picture.Assign(mass[ind[i,b] + 1]);
      ind[i,b]:= ind[i,b] + 1;
    end;
  end;
Цитата:
Ифы не предлагать
По крайней мере тут их 4 вместо 6 в исходном коде.
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 26.02.2016, 01:45   #3
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,426
По умолчанию

Вот так думаю прокатит:
Код:
for i:=1 to 4 do
begin
	if (not rev) and ((i = b) or (i = a)) then
		Continue;

	if (ind[a,i] = 3) or (ind[a,i] = 7) then
		ind[a,i]:= step - 1;

	if (ind[i,b] = 3) or (ind[i,b] = 7) then
		ind[i,b]:= step - 1;

	ima[a, i].Picture.Assign(mass[ind[a,i] + 1]);
	ind[a,i]:= ind[a,i] + 1;

	ima[i,b].Picture.Assign(mass[ind[i,b] + 1]);
	ind[i,b]:= ind[i,b] + 1;
end;
Человек_Борща вне форума Ответить с цитированием
Старый 26.02.2016, 08:28   #4
Iron Monk
Форумчанин
 
Аватар для Iron Monk
 
Регистрация: 05.10.2007
Сообщений: 478
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Вот так думаю прокатит:
Код:
for i:=1 to 4 do
begin
	if (not rev) and ((i = b) or (i = a)) then
		Continue;

	if (ind[a,i] = 3) or (ind[a,i] = 7) then
		ind[a,i]:= step - 1;

	if (ind[i,b] = 3) or (ind[i,b] = 7) then
		ind[i,b]:= step - 1;

	ima[a, i].Picture.Assign(mass[ind[a,i] + 1]);
	ind[a,i]:= ind[a,i] + 1;

	ima[i,b].Picture.Assign(mass[ind[i,b] + 1]);
	ind[i,b]:= ind[i,b] + 1;
end;
Не, так не прокатило)))
Аватар, спасибо. Код арбайтн.
Iron Monk вне форума Ответить с цитированием
Ответ


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