Сайт начал процедуру переезда на новый хостинг

Новый сайт
LOGO
Главная Регистрация Вход RSS
Приветствую Вас, Гость
Категории раздела
Случайное решение
[05.04.2015][ЕГЭ (П)]
№ 17 решите неравенство (0)
[04.08.2013][Pascal, Delphi, Lazarus]
Lazarus. Оператор выбора. (0)
[28.02.2016][ЕГЭ (П)]
Половину времени, затраченного на дорогу, автомобиль ехал со скоростью 60 км/ч, а вторую половину времени — со скоростью 46 км/ч. Найдит (0)
[24.09.2015][ОГЭ]
Высота АН ромба ABCD делит сторону CD на отрезки DH — 8 и СН = 2. Найдите высоту ромба (0)
[19.09.2015][ОГЭ]
Государству принадлежит 60% акций предприятия, остальные акции принадлежат частным лицам. Общая прибыль предприятия после уплаты налогов за (0)
[14.10.2015][ОГЭ]
На рисунке показано, как изменялась температура на протяжении одних суток. По горизонтали указано время суток, по вертикали — значение темпе (0)
[21.12.2014][ЕГЭ (П)]
На рисунке изображён график функции у = /(х), определённой на интервале (-5; 9). Найдите количество точек, в которых произ¬водная функции f{ (0)
[11.02.2016][ЕГЭ (П)]
В среднем из 150 карманных фонариков — три неисправных. Найдите вероятность купить работающий фонарик. (0)
Статистика
Яндекс.Метрика
Поделиться
Реклама
Вход на сайт
Популярное
[14.10.2015][ОГЭ]
Площадь четырёхугольника можно вычислить по формуле s=d1*d2*sin a/2 , где d1 и d2 — длины диагоналей четырехугольника, а —угол между диа (0)
[11.03.2016][ОГЭ]
Найдите площадь квадрата, описанного около окружности радиуса 9. (0)
[21.12.2014][ЕГЭ (П)]
Диагональ правильной четырёхугольной призмы наклонена к плоскости основания под углом 30°. Боковое ребро равно 3. Найдите диагональ призмы. (0)
[15.04.2015][ЕГЭ (П)]
В прямоугольном параллелепипеде ABCDA1B1C1D1 известны длины рёбер: АВ = 3, AD = 4, АА1 = 32. Найдите площадь сечения, про¬ходящего через вер (0)
[14.10.2015][ОГЭ]
12. На клетчатой бумаге с размером клетки 1x1 изображён параллелограмм. Найдите его пло¬щадь (0)
[21.12.2014][ЕГЭ (П)]
Корень(9 - 4*корень(5)) - корень(5) или √9-4√5-√5 (0)
[11.02.2016][ОГЭ]
На клетчатой бумаге с размером клетки 1x1 изображена трапеция. Найдите длину её средней линии. (0)
[29.01.2016][ОГЭ]
Биссектриса равностороннего треугольника равна 9Корень(3) . Найдите его сторону. (0)
[14.10.2015][ОГЭ]
После уценки телевизора его новая цена составила 0,57 старой. На сколько процентов уменьшилась цена телевизора в результате уценки? (0)
[21.12.2014][ЕГЭ (П)]
В случайном эксперименте симметричную монету бросают триж¬ды. Найдите вероятность того, что решка выпадет все три раза (0)
Свидетельство
Главная » Статьи » Программирование » Pascal, Delphi, Lazarus

Прерывание работы циклов в Lazarus и Delphi

Для полного контроля работы циклов, необходима возможность в любое время прервать цикл или пропустить один из ходов.

Для этого  существуют две процедуры: Break и Continue.

Процедура Break полностью останавливает цикл.  Она очень удобна при поисковых задачах. Например, необходимо в одномерном массиве случайных чисел отыскать первый элемент кратный и 5 и 3. Размер массива равен 100 элементов. Понятно, что можно перебрать все элементы, но искомый элемент найдется быстрее, чем через 100 шагов и все остальные шаги будут лишним. Поэтому после нахождения искомого элемента необходимо будет прервать работу цикла.

Задаем массив:

var

   f:array[1..100] of integer;

procedure TForm1.Button2Click(Sender: TObject);

var

    i,g:integer;

begin

Randomize;

      for i:=1 to 100 do

      begin

          g:=random(500);

          f[i]:=g;

          Memo1.Lines.Append(inttostr(g));

      end;

end;

    Процедура поиска:

procedure TForm1.Button1Click(Sender: TObject);

var

    j:integer;

begin

    for j:=1 to 100 do

    begin

        if (f[j] mod 5=0) and (f[j] mod 3=0) then \\ Если найден искомый элемент, то

        begin

          memo2.Lines.Append(inttostr(f[j])+'   №'+inttostr(j)); \\ Записываем этот элемент и его номер

          break;  \\ прекращаем работу цикла

        end;

    end;

end; 

Вот окно программы после выполнения 23 циклов поиска:

Как видно из изображения цикл не выполнялся до конца, самое большое он выполнился 39 раз. Если сложить все количество выполнения циклов за 23 раза то получим 309. То есть наша программы 309 раз проверила число на кратность 5 и 3. А если бы после получения результата мы бы продолжали проверять до конца цикла программе пришлось бы выполнить поиск 2300 раз. Данная процедура позволяет не тратить лишнее время на обработку ненужной информации.

 

Процедура Continue не останавливает цикл полностью, она только прекращает выполнение данного шага цикла и передает управление заголовку цикла для выполнения следующего шага.

Вот простая задача6 из случайного массива выбрать положительные числа и возвести их в одиннадцатую степень. В массиве будет 10 элементов.

Если возводить каждый элемент в одиннадцатую степень, а потом выбирать из них положительные, то цикл выполнится 110 раз. А можно сначала проверить число, и если оно отрицательное прервать выполнение данного шага цикла и преступить к следующему. Это не даст циклу возведения в степень выполниться лишние 11 раз.

Процедура задания массива.

var

   f:array[1..100] of integer;

procedure TForm1.Button2Click(Sender: TObject);

var

    i,g:integer;

begin

    Randomize;

      for i:=1 to 100 do

      begin

          g:=random(10)-5;

          f[i]:=g;

          Memo1.Lines.Append(inttostr(g));

      end;

end;

Процедура возведения в степень положительных элементов массива:

procedure TForm1.Button1Click(Sender: TObject);

var

    j,i,d:integer;

begin

    for j:=1 to 10 do

    begin

        d:=1;

        if f[j]<0 then  Continue; \\Прерываем выполнение шага цикла, так как элемент отрицательный

        for i:=1 to 11 do  d:=d*f[j];

        Memo2.Lines.Append(inttostr(d));

    end;

end;

Вот окно программы после выполнения:

Как видно только три элемента были возведены в 11 степень. Это добавило только 33 шага работы программы и в общем получим всего 43 шага вместо 110.

Данные процедуры работают во всех видах циклов, но конечно чаще всего используются в цикле for, так как в нем нет изначально условия остановки как в других циклах. Хотя и в них бывает необходимость ставить еще условия остановки.

Категория: Pascal, Delphi, Lazarus | Добавил: Ret-Ar (14.12.2013)
Просмотров: 3606 | Рейтинг: 0.0/0