![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
Здравствуйте, Товарищи. Помогите прервать цикл. результат цикла график в чарте. надо чтобы в цикле при наложении условия, данная итерация убиралась и точка в чарте не рисовалась.
. Заранее спасибо.![]() Последний раз редактировалось placiba, 16.04.2009 в 12:44. |
|
#2
|
||||
|
||||
|
не очень понял, что требуется, но циклы обычно прерываются командой "break".
|
|
#3
|
||||
|
||||
|
Цитата:
|
|
#4
|
|||
|
|||
|
Да, такие команды пробовала. тока у меня там фишка такая есть, надо чтобы точка на которую накладывается некоторое условие в цикле, совсем из счета убиралась. эт так трудно объяснить.
. Я чуть позже с кодом покожу, все подробно. И спасибо, заранее. ![]() |
|
#5
|
|||
|
|||
|
У меня цикл пересчитывается n раз. Предположим i=1 в этот момент выполнилось необходимое условие №1 прерывания цикла и данная точка на график не рисуется. Затем пошла вторая итерация. Вот в этой итерации уже условие №1 может и не выполняться. А мне надо чтобы таже самая точка все равно на график не рисовалась.
Мож ей какой флажок прикрепить... |
|
#6
|
||||
|
||||
|
Создай массив. При каждом проходе цикла, если какое- то условие выполнилось- записывай в массив координаты точки. А при прорисовке графика- пробегай по массиву, если не находишь в массиве координаты, то рисуй точку, находишь- не рисуй.
|
|
#7
|
|||
|
|||
|
Спасибо Вам ,TOJluK. Попробую так.
![]() |
|
#8
|
|||
|
|||
|
я обещала код. Вот он:
Код:
for i:=1 to n do //задаем массив начальных значений
begin
y0[i]:=dy*(i-1);
R0[i]:=dR*(i);
end;
while z<120
begin
for i:=1 to n do
BEGIN
runge2(R0[i],y0[i], z);// заранее заданная функция которая считает координату
if R[i]<0.5 then Continue;// Уберет все R[i]<0,5 при первой итерации (i=1) ,предположим это будит R[2], при второй итерации R[2] может не быть >0.5,
но мне нужно чтобы эта точка все равно исключалась и не рисовалась на графике
{x:=x0[i]; y:=y0[j];}
chart1.series[0].AddXY(z,R0[i]);
z:=z+dz;
END;
end;эта часть кода. ![]() Предложенный TOJluK вариант решения, немного не подходит. Не понятно как учесть те R[i] которые будут просчитываться в следующей итерации (те же самые по порядку i ). Надеюсь, смогла объяснить понятно. Рада любой идее, заранее спасибо. Последний раз редактировалось placiba, 16.04.2009 в 19:18. |
|
#9
|
|||
|
|||
|
Ну и заведи себе массив точек исключения. Можно просто по индексу.
Тогда условие будет что-то типа: Если R[i]<.5 то занести точку в массив исключений Если точка в массиве исключений то не рисовать Код:
var
ExceptionPoints : Array Of Integer;
function IsExcept(N : Integer) : Boolean;
var
I :Integer;
begin
Result := False;
For I := Low(ExceptionPoints) to High(ExceptionPoints) Do
Begin
Result := N = ExceptionPoints[i];
If Result Then Break;
End;
end;
procedure AddExcept(N : Integer);
begin
If Not IsExcept(N) Then
Begin
SetLength(ExceptionPoints,Length(ExceptionPoints)+1);
ExceptionPoints[High(ExceptionPoints)] := N;
End;
end;
// далее твой код. меняем условия:
if R[i]<0.5 then AddExcept(I);
If IsExcept(I) Then Continue;
// И опять твой код |
|
#10
|
|||
|
|||
|
Спасибо большое Вам за идею.
![]() Все в юнит вставила, так классно, все делает. Такая радость. Пасибо!!! Последний раз редактировалось placiba, 16.04.2009 в 23:07. |