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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.06.2024, 18:45   #11
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,728
По умолчанию

Цитата:
Сообщение от Kronos913 Посмотреть сообщение
То какой из вариантов лучше?
Без разницы, оптимизатор сделает одинаковый код, если что-то там от i не зависит
p51x вне форума Ответить с цитированием
Старый 02.06.2024, 12:32   #12
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,593
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Нет таких причин...
А мне кажется - есть - ну в общем случае, а не применительно к приведённому примеру, в котором действительно - нет Если условие выхода из цикла - достижение действительным числом заданного значения. Действ. число не может быть параметром цикла for по определению.
Код:
   x := 0;
   while x<1.0 do
   begin
      ....
      x := x + 0.127;
   end;
Конечно, можно запилить for до бесконечности с выходом по if, но как-то не кузяво.
Или я чегой-то не догоняю?

Цитата:
Без разницы, оптимизатор сделает одинаковый код, если что-то там от i не зависит
Оптимизатор выключить, компилить вручную. Простые решения - для слабаков

Последний раз редактировалось digitalis; 02.06.2024 в 12:41.
digitalis вне форума Ответить с цитированием
Старый 02.06.2024, 22:45   #13
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,600
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Или я чегой-то не догоняю?
Ну у него-то перебор элементов массива по индексу.
Arigato вне форума Ответить с цитированием
Старый 03.06.2024, 01:31   #14
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
А мне кажется - есть - ну в общем случае, а не применительно к приведённому примеру, в котором действительно - нет Если условие выхода из цикла - достижение действительным числом заданного значения. Действ. число не может быть параметром цикла for по определению.
Ну в принципе отличие циклов while и repeat от цикла for состоит в том, что для них заранее не известно количество итераций. А вариантов таких циклов может быть много и без участия действительных чисел.
northener вне форума Ответить с цитированием
Старый 03.06.2024, 13:43   #15
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,600
По умолчанию

Это особенность конкретно Паскаля, что в циклах for возможен лишь шаг +/-1. В других ЯП можно задавать произвольный шаг цикла, в том числе и вещественный. В Паскале же в случае другого шага приходится использовать while. Или хитрить с for.
Arigato вне форума Ответить с цитированием
Старый 04.06.2024, 02:05   #16
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Это особенность конкретно Паскаля, что в циклах for возможен лишь шаг +/-1. В других ЯП можно задавать произвольный шаг цикла, в том числе и вещественный.
А нафига в каких-то "других ЯП" это реализовано? И как при этом учитывается "неточность" вещественных чисел?
Можете представить реальный пример?
northener вне форума Ответить с цитированием
Старый 04.06.2024, 11:09   #17
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,728
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
А нафига в каких-то "других ЯП" это реализовано?
Потому что это удобно и соответствует командам процессора

Цитата:
Сообщение от northener Посмотреть сообщение
И как при этом учитывается "неточность" вещественных чисел?
Отдается на откуп процу, отдается программисту или пишится стиль гайд.

Цитата:
Сообщение от northener Посмотреть сообщение
Можете представить реальный пример?
https://godbolt.org/z/fsK8EE684
p51x вне форума Ответить с цитированием
Старый 04.06.2024, 12:28   #18
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,593
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
И как при этом учитывается "неточность" вещественных чисел?
Это же относится не только к циклу, но, например, и к if. Реализация общеизвестная, но проблема +/-1 остаётся.
Код:
    for (a=0;(a-nom_val) < eps;a+=0.001)
Кажется, так. Давно на Си не кодил.

Последний раз редактировалось digitalis; 04.06.2024 в 12:30.
digitalis вне форума Ответить с цитированием
Старый 04.06.2024, 16:13   #19
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,600
По умолчанию

Цитата:
Сообщение от northener Посмотреть сообщение
Можете представить реальный пример?
Да примеров куча. Для целых, например, перебрать элементы массива с нечетными индексами. Паскалисты обычно делают так:
Код:
for i := 1 to n do
  if odd(i) then a[i] := 0;
Или так:
Код:
for i := 1 to (n + 1) div 2 do
  a[i*2-1] := 0;
А кто-то и так:
Код:
i := 1;
for j := 1 to (n + 1) div 2 do begin
  a[i] := 0;
  inc(i, 2);
end;
Но это все костыли...
Arigato вне форума Ответить с цитированием
Старый 05.06.2024, 02:20   #20
northener
ПШП
Участник клуба
 
Регистрация: 15.07.2013
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
Да примеров куча.
Да я не про целый шаг отличный от 1.
Я спрашивал именно про вещественный шаг.
Естественно если кому-то "понадобился" вещественный шаг, значит это нужно для какой-то реальной физической задачи. Так для какой например?
Вот не могу ничего придумать.
northener вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Будет ли работать данный код?Что он будет делать? Виталий2266 Общие вопросы Delphi 8 18.10.2018 17:26
Написать программу, с помощью которой изображение будет разбиваться по пикселям и будет создаваться матрица andrey4515 Помощь студентам 2 08.01.2014 18:44
Точка с координатами х, у будет находиться в заштрихованной области, написать выражение которое будет истинным для данного рис. Polina S1 Помощь студентам 1 31.10.2013 16:38