Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Цикл с шагом


Автор: Serhik_z 5.8.2007, 12:09
Как сделать цикл с шагм

Код

For n:= 0 to 40 шаг 0,5 do
begin
xa:= cos (n)*r;
memo1.Lines.Add('Y' + FloatToStrF(xa,ffFixed,9,8));



Автор: dumb 5.8.2007, 12:13
Код

For n:= 0 to 80 do
begin
xa:= cos (n/2)*r;

Автор: Yanis 5.8.2007, 12:24
Если for вгоняет в определённые рамки, то while всегда поможет их расширить.

Автор: Serhik_z 5.8.2007, 14:17
Замечательно Yanis, но нужно с шагом.

Автор: ALeXandrK 5.8.2007, 14:35
Serhik_z: Ты видимо совсем недавно в программировании...

Код

... 
n:=0;
while n<>40 do
begin
  xa:= cos (n)*r;
  memo1.Lines.Add('Y' + FloatToStrF(xa,ffFixed,9,8));
  n:=n+0.5;
end;


А если совсем приспичило... то создавай массив и используй конструкцию
Код

for Элемент in Массив do Что-то;

но это уже правой рукой чесать левое ухо smile 

Автор: Yanis 5.8.2007, 14:39
Цитата(Serhik_z @  5.8.2007,  15:17 Найти цитируемый пост)
но нужно с шагом

А я от шага тебя не отговариваю.
Просто делай это через while, как ALeXandrK показал, а не с помощью for.

Автор: ivan219 5.8.2007, 15:51
А вот так будет по крассивее smile 
Код

n:=n+0,5; -> Inc(n,0.5);


Извеняюсь лажонулся smile Inc с дробными числами не работает smile 

Автор: mr.Anderson 5.8.2007, 20:17
Такое ощущение, что никто DRKB в глаза не видел. smile
Код

for i:=0 to max do
 if i mod STEP = 0 then
 begin
  //тело цикла
 end;

Вместо Step подставляем нужный шаг.

Автор: Yanis 5.8.2007, 20:45
mr.Anderson
Нужен дробный шаг.

Автор: ALeXandrK 5.8.2007, 20:47
Код

for i:=0 to max do
 if i mod STEP = 0 then
 begin
  //тело цикла
 end;


и в чем смылс... этот код и сложнее по структуре и больше по коду,
а значит некрасиво (красиво - это когда есть все и ничего лишнего!!!) smile 

Автор: aktuba 5.8.2007, 23:38
Цитата

а значит некрасиво


я бы добавил - запутано и сложно. чем while не устраивает?

Автор: ivan219 6.8.2007, 05:58
Как вареант:
Код

const
    Step = 0.5;
var
  I: Integer;
  N: Real;
begin
 N:=0;
 for I:=0 to Round(40/Step) do
  begin
   // Работа с переменной N
   N:=N+Step;
  end;
end;

Автор: sentry 6.8.2007, 08:26
Да зачем придумывать какой-то бредовый код с for'ом, когда с данной задачей быстрее и лучше справляется while! 
Единственное, что желательно будет сделать вдобавок - это проверку типа такого во избежание погрешности:
Код

while X <= 40 + Step/2 do
begin
  // ...
  X := X + Step;
end;

Автор: mr.Anderson 6.8.2007, 14:35
Ну чего вы на меня накинулись? smile Я просто привел пример из DRKB на эту тему. Плюс мало ли, может, кому очень хочется сделать For вместо While? smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)