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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.11.2020, 15:16   #1
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию Использование цикла for

При попытке использовать цикл типа
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i,k: integer;
begin
  k:=0;
  for i:=0 to 10 do
    k:=k+1;
  if k=100 then exit;
end;
переменная i в цикле начинает инициализацию с 11 в сторону уменьшения.
Если применить
Код:
procedure TForm1.FormCreate(Sender: TObject);
var i,k: integer;
begin
  k:=0;
  for i:=20 downto 10 do
    k:=k+1;
  if k=100 then exit;
end;
инициализация начинается с -11 в сторону увеличения.
У меня глюкнутая среда или где то опция затесалась специальная?
Делфи 7.
Aleksandr_59 вне форума Ответить с цитированием
Старый 22.11.2020, 15:59   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Цитата:
Сообщение от Aleksandr_59 Посмотреть сообщение
переменная i в цикле начинает инициализацию с 11 в сторону уменьшения
Так вы в теле цикла счетчик не используете.
Arigato вне форума Ответить с цитированием
Старый 22.11.2020, 17:17   #3
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Так вы в теле цикла счетчик не используете.
Не! Не в этом дело.
Реально там началось с чтения элемента массива BefD[i]. Это уже потом для упрощения и проверки сделал вышеуказанный пример.
Aleksandr_59 вне форума Ответить с цитированием
Старый 22.11.2020, 17:51   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Если сделать так:
Код:
for i:=0 to 10 do
  k:=k+1+i-i;
То i принимает значения от 0. Так что, как уже отметил Arigato, вы, похоже, не использовали i внутри цикла, поэтому она была оптимизирована.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 22.11.2020, 18:14   #5
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Да, действительно...
Но почему тогда код
Код:
for i:=0 to length(BufD)-1 do
    Form1.Memo1.Lines.Text:=Form1.Memo1.Lines.Text+IntToStr(bufD[i])+' ';
работает наперекосяк?
Ввести дополнительную строчку +i-i...
Aleksandr_59 вне форума Ответить с цитированием
Старый 22.11.2020, 18:19   #6
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Цитата:
Сообщение от Aleksandr_59 Посмотреть сообщение
работает наперекосяк?
А что именно не так в работе?
Arigato вне форума Ответить с цитированием
Старый 22.11.2020, 18:20   #7
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
А что именно не так в работе?
Перебор элементов буфера начинается с 256 (последний элемент массива)
Aleksandr_59 вне форума Ответить с цитированием
Старый 22.11.2020, 18:33   #8
Aleksandr_59
Пользователь
 
Регистрация: 14.10.2011
Сообщений: 77
По умолчанию

Изменение вида
Код:
Form1.Memo1.Lines.Text:=Form1.Memo1.Lines.Text+IntToStr(bufD[1+i-1])+' ';
Восстановила нормальную работу.
Заморочки оптимизации...
Всем спасибо.
Aleksandr_59 вне форума Ответить с цитированием
Старый 22.11.2020, 20:38   #9
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 16,219
По умолчанию

Цитата:
Сообщение от Aleksandr_59 Посмотреть сообщение
Заморочки оптимизации...
Не знаю, у меня все нормально работает:
Код:
var BufD: array of integer;

procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
begin
  SetLength(BufD, 256);
  for i:=0 to High(BufD) do
    BufD[i]:=i;
  ShowMessage('OK');
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i: integer;
begin
  Memo1.Lines.Clear;
  for i:=0 to length(BufD)-1 do
    Form1.Memo1.Lines.Text:=Form1.Memo1.Lines.Text+IntToStr(bufD[i])+' ';
end;
Первая кнопка заполняет массив, вторая выводит:
Изображения
Тип файла: png 1.png (33.7 Кб, 2 просмотров)
Arigato вне форума Ответить с цитированием
Старый 07.12.2020, 14:27   #10
BLACK_RAIN
Форумчанин
 
Регистрация: 13.02.2012
Сообщений: 867
По умолчанию

Цитата:
Сообщение от Aleksandr_59 Посмотреть сообщение
переменная i в цикле начинает инициализацию с 11 в сторону уменьшения.
Когда я задавал такой же вопрос, то мне объяснили, что так и должно быть, а я дурак.
BLACK_RAIN вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Использование операторов цикла Yar_ Помощь студентам 1 16.12.2014 16:45
C++ Использование цикла с постусловием do…while KyKi Помощь студентам 10 12.09.2013 20:16
использование операторов цикла. 555ALEXANDR555 Помощь студентам 2 10.01.2011 17:11
Использование цикла со счётчиком Sexy girl* Помощь студентам 0 23.12.2009 21:41
Использование операторов цикла кася Паскаль, Turbo Pascal, PascalABC.NET 3 02.05.2008 00:32