Delphi

While do delphi: Урок 4 — Циклы — The Delphi

Цикл while Delphi

Поговорим еще об одной инструкции — инструкции while Delphi, обеспечивающей реализацию цикла. Инструкция while Delphi применяется тогда, когда некоторая последовательность действий выполняется несколько раз, при этом необходимое количество повторений в процессе разработки программы заранее не известно (его можно определить лишь в момент работы программы).

В качестве примеров на применение цикла while можно считать вычисление с заданной точностью (например, eps=0.000001), осуществление поиска в массиве, поиск в файле. Общий вид инструкции while Delphi представляется следующим образом:

откуда условие означает выражение типа Boolean, устанавливающее условие, при котором будут выполнены инструкции цикла.

Последовательность выполнения инструкции while в Delphi такова:

  1. Вначале происходит вычисление значения выражения условие;
  2. Если условие принимает значение False (значение Ложь — условие не выполнено), то инструкция while завершает свое выполнение;
  3. В случае значения True (значение Истина — условие выполнено) осуществляется выполнение инструкций тела цикла, находящихся между служебными словами begin и end. Далее вновь проводится проверка выражения условия. Если и это условие выполнено, то вновь повторяются инструкции цикла, расположенные между зарезервированными словами begin и end. Так будет продолжаться до тех пор, пока значение выражения условие не примет значение False.

Алгоритм, реализующий инструкцию while, проиллюстрирован на рисунке ниже:

Заметка. Чтобы инструкции цикла while, находящиеся между служебными словами begin и end, выполнялись хоть один раз, нужно, чтобы вначале выполнения инструкции while значению выражения условие было присвоено значение Истина. Для завершения цикла while, необходимо, последовательность инструкций, расположенная между зарезервированными словами begin и end, оказывала влияние на значение выражения условие (другими словами, осуществляла изменение значения переменных, которые входят в выражение условие).

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

Основу алгоритма составляет тот факт, что сумма числового ряда: 1 — 1/3 + 1/5 — 1/7 + 1/9 + … стремится к числу ПИ/4 с большим числом элементов. Нетрудно определить n-й член рассматриваемого числового ряда: An = 1/(2*n — 1).

Знак «-» ставится перед очередным элементом ряда, если n представляет собой четное число — это можно установить делением числа n на 2: если остаток от деления равен нулю — n четно, в противном случае число n является нечетным. Вычисление значения числа ПИ заканчивается в том случае, если значение некоторого члена ряда меньше заданной точности вычисления. Диалоговое окно программы в процессе ее работы представлено иллюстрацией ниже:

Как Вы можете заметить, пользователь сначала осуществляет ввод в поле Edit1 точности  вычисления. При нажатии пользователем на командную кнопку Вычислить (Button1) программа производит вычисление значения числа ПИ и впоследствии выводит полученный результат в поле метки Label1. Листинг данной программы Вы можете скачать по этой ссылке.


Похожие записи:
  • Цикл case Delphi
  • Назначение файла Delphi
  • Оператор goto Delphi
  • Ошибки открытия файлов Delphi
  • Процедуры Delphi
Delphi

Help — коллекция статей, исходников, книг, ответов на вопросы программирования на языке программирования Delphi и Pascal.

— это среда быстрой разработки, в которой в качестве языка программирования используется язык Delphi. Язык Delphi — строго типизированный объектно-ориентированный язык, в основе которого лежит хорошо знакомый программистам

Object Pascal.

На сайте Delphi-Help вы можете скачать книги по Delphi, для дальнейшего изучения этого удивительного языка программирования. Также в файловом архиве доступны компоненты, исходники, программы для облегчения разработки своих собственных приложений. Все материалы и файлы на сайте бесплатны.

Это необходимо знать каждому программисту:
  • Работа с ADO в Delphi
  • Цикл с постусловием (REPEAT-UNTIL)
  • Цикл с параметром (FOR)
  • Цикл с предусловием (WHILE-DO)
  • Циклические алгоритмы. Цикл с предусловием.
  • Хранимые процедуры
  • Создание и изменение базы данных в InterBase/Firebird
  • Использование TWebBrowser (статья)
  • Одномерные массивы. Формирование массива и вывод его элементов
  • Руководство по TDbf
  • Копирование и восстановление базы данных в InterBase / Firebird
  • Алгоритм 3. Сортировка шейкером
  • Работа с BLOB-полями в клиентских приложениях InterBase и Firebird на основе компонентов FIBPlus
  • SQL-запросы в Delphi
  • Учетные записи пользователя в InterBase/Firebird
  • Ограничения базы данных
  • TADOConnection
  • Индексы
  • Компонент Chart
  • Типизированные файлы
  • Список ошибок BDE
  • QuickReport руководство
  • Алгоритм 2. Пузырьковая сортировка
  • Задача 579 на Pascal — Шифр Цезаря
  • FIBPlus: Обработка ошибок базы данных
  • Нетипизированные файлы
  • Решение уравнения методом хорд, методом касательных (метод Ньютона), методом половинного деления, методом простых итераций
  • Дипломная работа: Разработка базы данных для информатизации деятельности предприятия малого бизнеса Delphi
  • Количество вхождений подстроки в строку
  • Использование текстовых файлов для импорта и экспорта
  • Сумма прописью (хорошая функция)
  • Создание собственной кнопки в Delphi
  • Firebird взаимодействие с NULL
  • Как посчитать факториал?
  • Как узнать номер недели данного дня в году?
  • Devrace FIBPlus: Оптимизация сетевого трафика в приложениях на Delphi и C++ Builder
  • Счетчик посещений на Delphi
  • Cпроектировать и написать программу «Интерпретатор» на Pascal
  • Перевод чисел из одной системы исчисления в другую
  • Rave Reports-руководство разработчика

Общение

Авторизация

Логин

Пароль

Запомнить меня

  • Забыли пароль?
  • Забыли логин?
  • Типизированные файлы

    Типизированные файлы Тип файлов, для которого нет поддержки в OS…

  • Задача 579 на Pascal — Шифр Цезаря

    Задача 579 на Pascal — Шифр Цезаря Шифр Цезаря. Этот…

  • Нетипизированные файлы

    Нетипизированные файлы Третий тип файлов Паскаля, это нетипизированные файлы, этот…

  • Использование текстовых файлов для импорта и экспорта

    Использование текстовых файлов для импорта и экспорта Текстовые файлы являются…

  • Как изменить дату создания файла?

    Как изменить дату создания файла? function SetFileDateTime( const FileName: string;…

  • Как изменить атрибуты файла?

    Как изменить атрибуты файла? r — ReadOnly h — Hidden…

Счетчики


Файловый архив — популярное

FastReport full source v5. 2.1225996
Базы данных в Delphi22078
Практикум по Delphi для решения прикладных задач19095
Delphi. Учимся на примерах16267
Delphi 7 для профессионалов14424
Программирование в Delphi 77107
Delphi. Профессиональное программирование6690
Основы Delphi. Профессиональный подход5219
Assembler. Учебный курс4084
Графика в проектах Delphi4082
Розница ИП v1.32769
Delphi 72509
DevExpress VCL Component2454
TXLSFile 4.02078
AlphaControls package2034


Последние статьи

  • Рисуем на рабочем столе

    Вы можете использовать поверхность рабочего стола для вывода любой графики. Этот способ может понадобится для написания различных напоминалок, показ праздников. Вы можете поселить на рабочем столе забавного персонажа из комикса…

  • Работа с потоками в Delphi

      Нередко встречал на форумах мнения, что потоки не нужны вообще, любую программу можно написать так, что она будет замечательно работать и без них. Конечно, если не делать ничего серьёзней…

  • Перестановка чисел без третей переменой

    Перестановка чисел без третей переменной. В данной статье рассмотрим способ, как поменять местами значения двух переменных без использования третей. Для этого нам понадобится, скажем, два edit и одна кнопка. Разместите…

Последние комментарии

delphi — пока блок do не завершен, все равно нельзя выйти из потока?

Вчера эксперты посоветовали использовать «пока не завершено, начать…» в функции выполнения потока, чтобы проверить свойство завершения потока и изящно выйти из потока изнутри. Мы только что протестировали код, но он по-прежнему не может завершить поток. Но этот поток можно практически и немедленно завершить, вызвав функцию TerminateThread извне. Что-то не так в функции выполнения или в этом большом цикле while внутри функции выполнения? Или есть особые требования при использовании цикла while not terminated?

Кстати, в чем разница между endthread, exitthread и terminatethread? как их использовать? что сравнительно лучше?

Еще раз большое спасибо за помощь.

  • Делфи

4

Если в то время как не завершено сделать не завершает поток достаточно быстро, то работа, проделанная в каждой итерации, слишком велика (то есть условие цикла не завершено проверяется слишком редко), или вы «случайно » поставить много кода после этого цикла.

Конечно, если у вас есть поток, который выполняет цикл снова и снова, пока не будет завершен, вам следует выполнить , пока он не завершен, сделать . Обычно одна итерация выполняется за короткое время (порядка от 1 до 10 000 итераций в секунду?), поэтому условие цикла проверяется часто (от 1 до 10 000 раз в секунду). Но если ваш поток не состоит из такого цикла, то, конечно, помещая все тело Execute внутрь , пока не Terminated do вам не поможет.

Хорошо

 процедура TMyThread.Execute;
начинать
  унаследовано;
    пока не прекращено делать
      ВычислитьСледующиеДесятьЦифр Пи; // Занимает 100 мс. 
конец;
 

Плохой

 процедура TMyThread.Execute;
начинать
  унаследовано;
    пока не прекращено делать
      ВычислитьAVeryVeryLargeFractal; // Занимает час.
                                    // И вы создадите такой же фрактал
                                    // снова и снова.
конец;
 

0

Если вы должны завершить задание — например, потому что оно заблокировано в коде, который вы не контролируете, — то рассмотрите возможность попытки полностью обернуть его в отдельный исполняемый файл, запустить его как подпроцесс и завершить процесс, когда вам это нужно, остановлен. Процессы имеют гораздо более сильную изоляцию, чем потоки. Завершение потока — верный рецепт боли — что, если завершаемый поток удерживает блокировку в диспетчере памяти или где-то подобном? В следующий раз, когда вы попытаетесь выделить память (или что-то подобное), ваше приложение будет заблокировано!

0

CodeInChaos предлагает несколько полезных советов в комментариях — очень мало ситуаций, когда поток должен быть завершен извне.

В некоторых средах потоков есть функции отмены, когда вы отменяете (не уничтожаете) поток, и он когда будет готов , уничтожит себя. Это позволяет потоку устанавливать свои собственные правила безопасного завершения.

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

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

 делать, не завершая:
    подождите 2 секунды для работы
    если не прекращается и работа доступна:
        сделай это
 

Этот конкретный поток никогда не будет занимать более двух секунд для выхода после установки флага завершения .

И, если сделать это — это длительная задача, вы также можете периодически проверять внутри нее, нужно ли выходить.

0

Зарегистрируйтесь или войдите в систему

Зарегистрируйтесь с помощью Google

Зарегистрироваться через Facebook

Зарегистрируйтесь, используя адрес электронной почты и пароль

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Опубликовать как гость

Электронная почта

Требуется, но не отображается

Estruturas de Repetição – Delphi Para Iniciantes

As estruturas de repetição no Delphi , тамбем conhecidas como циклы , são indispensáveis ​​para o processo de senvolvimento. Por isso é muito Importante Que Você Conheça bem SUA estrutura E Domine SUA utilização.

Existem situacões onde é necessário repetir um determinado trecho de um processo um certo número de vezes.

Представьте себе, что вам нужно выполнить 10 операций, чтобы выполнить блокировку инструкций. Sem as estruturas de repetição ficaria muito trabalhoso e em alguns casos praticamente impossível.

Ассим, существующий как estruturas de repetição № Delphi , , который разрешает выполнение estas tarefas de forma mais simples.

в качестве эстратураса de repetição também podem ser wamadas de laços ou петли , Sendo Que Podem receeS deis de laços de repetiçã:

  • серао executadas; е
  • Laços infinitos: Neste Tipo de Laço não se conhece previamente o número de repetições que serão executadas. Сан-Тамбем Чамадос condicionais pelofato de encerrarem a sua execução mediante uma determinada condição.

Existem 3 estruturas de repetição no Delphi , são elas: for, while…do e repeat…until .

ESTRUTURAS DE REPETIÇÃO

f or

O comando  for executa repetitivamente um comando enquanto é atribuído um valor incremental a uma variável de controle, que chamamos de contador do  для . A repetição, ou o loop só é interrompido quando o contador atinge o seu limite, que é definido tambem pela instrução for .

Синтаксис:

1. для variável := to/downto do
2.    

ou (com mais de uma instrução)

1. для variável := to/downto do
2. begin
3.        ;
4.        ;
5.        ;
6.        <…>
7. конец;

Aonde:

variável = contador do  for , qualquer valor inteiro.
= доблесть a partir do qual o loop deve iniciar, qualquer valor inteiro.
= valor limite para o término do loop , qualquer valor inteiro (>= ao quando usado o to e <= quando usado o downto ).

Пример: somar uma variável até 10

1. процедура Somar;
2. var
3.     Contador, Сома: Целое число;
4. начало
5.     Сома := 0;
6.     для  Contador := 1 до 10 до
7.         Сома := Сома + 1;
8.  конец;

No instanceo acima, temos duas variáveis: Contador e Soma. Contador será responsável por fazer o controle do loop . Ele será iniciado por 1 e irá interromper o lazo quando chegar em 10.

a cada Loop Exeraado A Variável Soma Será Ingrementada em 1. Varito, Final Do Loop , variva om de 10.

Como só temos uma instrução no instanceo acima, não foi necessário utilizar a instrução  начало…конец для контроля блока.

ESTRUTURAS DE REPETIÇÃO

while…do

Esta estrutura de repetição se caracteriza por efetuar um teste lógico no início do  loop , verificando se é permitido executar o trecho de instruções abaixo дела.

A estrutura while…do tem o seu funcionamento controlado por condição. Desta forma, poderá executar um determinado conjunto de instruções enquanto a condição verificada permanecer verdadeira.

No momento em que a condição se torna falsa, o processamento da rotina é desviado para fora do  loop . См. условие для логотипа falsa no início do loop , as instruções contidas no  while…do serão ignoradas.

Синтаксис:

1. в то время как    do
2.    ;

или (com mais de uma instrução)

1. while    do
2. begin
3.        ;
4.        ;
5.        ;
6.        <…>
7. конец;

Veja como ficaria o mesmo instanceo usado no  for , mas aplicando o  while…do :

Пример: somar uma variável até 10

1. процедура  Somar;
2. var
3.     Сома: Целое число;
4. начало
5.     Сома := 0;
6.      в то время как  Сома <= 10  до
7.         Сома := Сома + 1;
8.  конец;

Восстановить не в качестве примера, que quando utilizamos o  while…do ,   nãadoro temos a necessidade de utilizar uma variável. Pois antes de iniciar o Loop , UM TESTE Lógico é Efetuado, OU Seja, O Processo Só Será Realizado Enquanto Soma <= 10. Assim Que variavel Soma Atingir O Valor 10, O Loop

30202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202020202.2.

Como só temos uma instrução no instanceo acima, não foi necessário utilizar a instrução  начало…конец para controle do bloco.

ESTRUTURAS DE REPETIÇÃO

повтор…до

ESTA Estrutura é parecida com a Estrutura В то время как… Do , MAS Aractal DiferenCa Elre, é Que no Повторите … до , O Teste Lógico é efetuado no , O Test .

Seu funcionamento tambemé controlado por decisão. Esta instrução irá efetuar a execução de um conjunto de instruções pelo menos uma vez antes de verificar a validade da condição estabelecida.

Форма Деста, повторить…до irá processar um conjunto de instruções, no minimo uma vez, até que a condição se torne verdadeira. Para a estrutura  повторите… до , um conjunto de instruções é executado enquanto a condição se mantém falsa e até que se torne verdadeira.

Синтаксис:

1. повтор
2.    ;
3. до
4.    <условия>;

ou (com mais de uma instrução)

1. повторить
2.    ;
3.    ;
4.    ;
5.    <…>
6. до
7.    ;

Veja como ficaria o mesmo instanceo usado № for e № while…do , mas aplicando o повторить… до :

Пример: somar uma variável até 10

01. процедура Somar ;
02. var
03.     Сома: Целое число;
04. начало
05.     Сома := 0;
06.     повтор
07.         Сома := Сома + 1;
08.     до
09.         Сома <= 10;
10. конец;

No instanceo acima tambem não temos a necessidade de ter uma variável como Contador, o controle é feito pelo teste logico ao final do  петля .

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *