Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 16.04.2009, 10:49
placiba placiba вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 10
Репутация: 10
По умолчанию Здравствуйте, Товарищи. Помогите прервать цикл.

Здравствуйте, Товарищи. Помогите прервать цикл. результат цикла график в чарте. надо чтобы в цикле при наложении условия, данная итерация убиралась и точка в чарте не рисовалась. . Заранее спасибо.

Последний раз редактировалось placiba, 16.04.2009 в 12:44.
Ответить с цитированием
  #2  
Старый 16.04.2009, 11:11
Аватар для Karsh
Karsh Karsh вне форума
Активный
 
Регистрация: 22.09.2007
Адрес: SPb
Сообщения: 228
Версия Delphi: 7, 2009, XE2
Репутация: 70
По умолчанию

не очень понял, что требуется, но циклы обычно прерываются командой "break".
__________________
Начинающий программист уверен, что в 1 килобайте 1000 байт.
Законченный программист уверен, что в 1 километре 1024 метра.
Ответить с цитированием
  #3  
Старый 16.04.2009, 12:10
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Цитата:
Сообщение от Karsh
не очень понял, что требуется, но циклы обычно прерываются командой "break".
ну или Continue - для перехода к следующему шагу цикла
Ответить с цитированием
  #4  
Старый 16.04.2009, 12:29
placiba placiba вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

Да, такие команды пробовала. тока у меня там фишка такая есть, надо чтобы точка на которую накладывается некоторое условие в цикле, совсем из счета убиралась. эт так трудно объяснить. . Я чуть позже с кодом покожу, все подробно.
И спасибо, заранее.
Ответить с цитированием
  #5  
Старый 16.04.2009, 12:44
placiba placiba вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

У меня цикл пересчитывается n раз. Предположим i=1 в этот момент выполнилось необходимое условие №1 прерывания цикла и данная точка на график не рисуется. Затем пошла вторая итерация. Вот в этой итерации уже условие №1 может и не выполняться. А мне надо чтобы таже самая точка все равно на график не рисовалась.
Мож ей какой флажок прикрепить...
Ответить с цитированием
  #6  
Старый 16.04.2009, 13:17
Аватар для TOJluK
TOJluK TOJluK вне форума
Местный
 
Регистрация: 25.02.2009
Адрес: Минск
Сообщения: 551
Версия Delphi: 2007
Репутация: 110
По умолчанию

Создай массив. При каждом проходе цикла, если какое- то условие выполнилось- записывай в массив координаты точки. А при прорисовке графика- пробегай по массиву, если не находишь в массиве координаты, то рисуй точку, находишь- не рисуй.
Ответить с цитированием
  #7  
Старый 16.04.2009, 15:34
placiba placiba вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

Спасибо Вам ,TOJluK. Попробую так.
Ответить с цитированием
  #8  
Старый 16.04.2009, 18:55
placiba placiba вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 10
Репутация: 10
По умолчанию

я обещала код. Вот он:

Код:
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  
Старый 16.04.2009, 19:16
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,098
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Ну и заведи себе массив точек исключения. Можно просто по индексу.
Тогда условие будет что-то типа:

Если 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  
Старый 16.04.2009, 19:36
placiba placiba вне форума
Прохожий
 
Регистрация: 16.04.2009
Сообщения: 10
Репутация: 10
Хорошо

Спасибо большое Вам за идею.
Все в юнит вставила, так классно, все делает. Такая радость. Пасибо!!!

Последний раз редактировалось placiba, 16.04.2009 в 23:07.
Ответить с цитированием
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 04:33.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025