2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 оператор "условие" в Delphi
Сообщение25.05.2010, 22:01 


17/05/10
14
(выше стоит цикл который меняет границы а и b,т.е этот цикл выполняется для 200 интервалов [a;b])


for r:=a to b do
begin
g:=g+cc[r];
midlfon:=midlfon+fon20[r];
end;

далее идет сравнение "g" c "midlfon" (>,<) для каждого интервала [a,b]

как мне сделать так чтоб следующий кусок программы выполнялся только в случае если для всех интервалов выполняется условие "g < midlfon" ?
и как, если ХОТЯ БЫ ОДИН РАЗ не выполняется, то другая чать проги выполняется???

 Профиль  
                  
 
 Re: оператор "условие" в Delphi
Сообщение25.05.2010, 22:11 
Заслуженный участник


04/05/09
4587
Заведите ещё одну Boolean переменную в которой сохраняйте выполнение условия:
Код:
    all_good := true;
    for all intervals
    begin
        for r:=a to b do
        begin
            g:=g+cc[r];
            midlfon:=midlfon+fon20[r];
        end;
        if g < midlfon then
            all_good := false;
    end;
    if all_good
        ...
    else
        ...;

 Профиль  
                  
 
 Re: оператор "условие" в Delphi
Сообщение25.05.2010, 22:19 


17/05/10
14
Вот спасибо огромное. И вправду всё очень легко... :-)

 Профиль  
                  
 
 Re: оператор "условие" в Delphi
Сообщение26.05.2010, 01:42 
Заслуженный участник


26/07/09
1559
Алматы
Можно ещё вынести проверку условий в отдельную процедуру. Если условие в какой-то момент не выполнилось, то выполняем связанные действия и выходим из процедуры (exit). После того как цикл проверки условий отработает (т.е., выполнятся все условия и преждевременный выход не произойдет), можно сразу же за ним выполнять действия, предусмотренные на случай выполнения сразу все условий.

Видоимененный пример venco:
код: [ скачать ] [ спрятать ]
Используется синтаксис Pascal
procedure Check;
begin
    ...

   for ... {all intervals}
    begin

        for r:=a to b do
        begin
            g:=g+cc[r];
            midlfon:=midlfon+fon20[r];
        end;

        if g < midlfon then
        begin
            {A}

            exit;
        end;

    end;

    {B}
end;
 


Здесь на месте {A} должен быть код, срабатывающий если условие хотя-бы один раз не выполняется, а на месте {B} -- код, срабатывающий при выполнении всех условий.

Рузультат -- экономия флажка, т.е., одного бита. Негусто... :)

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group