Как сделать цикл в делфи

Добавил пользователь Алексей Ф.
Обновлено: 04.10.2024

Если между begin и end находится только одна инструкция, то слова begin и end можно не писать.

Знаете ли Вы, что в 1974 - 1980 годах профессор Стефан Маринов из г. Грац, Австрия, проделал серию экспериментов, в которых показал, что Земля движется по отношению к некоторой космической системе отсчета со скоростью 360±30 км/с, которая явно имеет какой-то абсолютный статус. Естественно, ему не давали нигде выступать и он вынужден был начать выпуск своего научного журнала "Deutsche Physik", где объяснял открытое им явление. Подробнее читайте в FAQ по эфирной физике.

СКОРАЯ КОМПЬЮТЕРНАЯ ПОМОЩЬ


(пон. - вс. с 9 до 20 ч., спросить Игоря)
Ремонт компьютеров

    Программирование в среде Delphi 7. Циклы в Object Pascal

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

По простому, база данных - это файл или несколько файлов, объединённых по какому-либо признаку, в котором (в которых) хранится некоторая информация в структурированном виде. Более подробно этот вопрос будем рассматривать далее, а пока что рассмотрим понятие цикла. Цикл в программировании - это набор операций, которые повторяются некоторое количество раз. Начнём с цикла for.

Открываем среду разработки Delphi 7 и устанавливаем кнопку на форму. Но перед этим сделаем всё по правилам! Проект сохраним в новой рабочей папке, свойство Caption формы изменим в инспекторе объектов на "Примеры циклов". Название формы - значение свойства Name изменим с Form1 на FCicle. Сохраним файлы проекта.

Первая кнопка понадобится нам для демонстрации работы цикла for.

Кликаем один раз по кнопке в редакторе форм, тогда в "Инспекторе объектов" отобразятся свойства кнопки. Вообще, когда кликаем по компоненту на форме, в окне "Object Inspector" отображаются свойства выбранного компонента. Я, в качестве примера, изменяю свойство Font у кнопки, выделяя шрифт жирным и увеличивая его размер. Потом справа от кнопки поставим компонент TEdit и, примыкающий к строке редактирования, компонент TUpDown, находящийся на вкладке Win32 палитры компонентов.

Для экземпляра UpDown1 в свойстве Associate выбираем Edit1. Теперь, регулируя стрелками, мы можем изменять значение в строке редактирования. Укажем, что это значение параметра цикла, поставив метку с соответствующей надписью над Edit1.

Делаем двойной щелчок мыши по кнопке Button1, и перед нами в окне кода появляется шаблон процедуры обработчика события нажатия на кнопку Button1Click. Начнём писать наш цикл. Пусть перед нами стоит задача посчитать сумму натурального ряда чисел от 1 до значения которое мы укажем в строке Edit1. Ниже представлен код.

procedure TFCicle.Button1Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
for i := 1 to StrToInt(Edit1.Text) do
S := S + i;

ShowMessage(IntToStr(S));
end;

Сперва определяем две локальные переменные (эти переменные используются только внутри события нажатия на кнопку). Переменная i - это счётчик цикла. Переменная S - результирующая сумма, изначально, после объявления, имеет значение равное нулю. Всё-таки лучше иметь привычку сумму всегда обнулять. Затем в цикле, счётчик принимает последовательно значения 1, 2, 3 и т. д. до StrToInt(Edit1.Text). Здесь мы преобразовываем строковое значение, которое ввели в строке редактирования, в целочисленное значение, посредством функции StrToInt. Если целочисленному (integer) значению попытаться присвоить строковое значение, то возникнет ошибка компиляции, программа не запустится! Так вот, каждый раз в цикле присваивая последовательно значения счётчика i значению суммы S, мы получаем в итоге требуемый результат. Если в строку Edit1 поставить 1, то цикл выполнится 1 раз. А если поставить значение меньшее начальному значению счётчика, в данном случае это 1, то цикл вообще не выполнится. Ошибки не возникнет. Окончательно выводим результат с помощью процедуры ShowMessage. В качестве параметра в неё нужно передать строку, поэтому целочисленное значение переменной S преобразовываем в строку функцией IntToStr.

У компонента TUpDown есть свойства Min и Max, определяющие минимальное и максимальное значение. По умолчанию это 0 и 100, можно изменить на своё усмотрение.

Если мы введём в строку редактирования не число, а какой-либо символ, то будет выдана ошибка после нажатия на кнопку. Потому что в качестве параметра для функции StrToInt необходимо передавать целое значение. Чтобы оградить пользователя от этой ошибки, нужно просто не дать ему возможности вводить символы в эту строку с клавиатуры. Кликаем по строке Edit1, жмём F11, выбираем вкладку Events "Инспектора объектов", два раза кликаем на событии OnKeyPress. Это событие, когда нажата клавиша на клавиатуре. В этом событии у нас есть возможность обработать вводимый символ, изменить его значение. Пишем следующий код.

Стоит понимать, что существуют ещё и вложенные циклы, которыми часто приходится пользоваться. И ещё, в рамках одного цикла может быть не одно действие, а несколько. В этом случае эти действия необходимо заключить между ключевыми словами begin и end.

К примеру вот так:
for i := 1 to n do
begin
Процедура1(i, набор параметров);
for j := 1 to m do
begin
Процедура2(i, j, набор параметров);
Процедура3(i, j, набор параметров);
end;
end;

Перейдём к изучению других циклов. Цикл с пост-условием: repeat . until (условие). И цикл с пред-условием: while (условие) do .

Цикл с пост-условием

Добавляем на форму ещё одну кнопку или копируем предыдущую при помощи сочетания клавиш Ctrl + C и Ctrl + V. В случае копирования все свойства для новой кнопки сохраняются, в частности останется тот же шрифт (свойство Font). Два раза кликаем на эту кнопку Button2 и вставляем в шаблон для события нажатия на кнопку наш код с циклом Repeat.


procedure TFCicle.Button2Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
i := 0;
Repeat
Inc(i); //i := i + 1;
S := S + i;
Until i = StrToInt(Edit1.Text);

ShowMessage(IntToStr(S));
end;

Как работает этот цикл. Счётчик цикла мы вводим самостоятельно. Сумму и счётчик предварительно обнуляем. Далее увеличиваем счётчик i на 1 процедурой Inc(i), которая работает так же как и в случае такого присвоения: i := i + 1, но делается это немного быстрее. При малых значениях витков цикла это быстродействие "незаметно для глаза". Потом прибавляем к нашей сумме S новое значение счётчика i на каждом витке цикла, пока не будет выполнено условие, стоящее после ключевого слова Until, то есть пока значение i не станет равным значению, введённому в строку редактирования.

Для этого случая стоит отметить, что если оставить нулевое значение в строке параметра цикла, то на первом шаге цикла наш счётчик уже станет равным 1 и условие i = StrToInt(Edit1.Text); не будет выполнено никогда, программа зависнет! Поэтому поставим перед циклом условие. Пусть наш цикл будет выполняться только если значение параметра цикла больше нуля.


procedure TFCicle.Button2Click(Sender: TObject);
Var
i, S: Integer;
begin
S := 0;
i := 0;
if StrToInt(Edit1.Text) > i then
Repeat
Inc(i); //i := i + 1;
S := S + i;
Until i = StrToInt(Edit1.Text);

ShowMessage(IntToStr(S));
end;

Цикл с пред-условием

Разместим ещё кнопку на форме.

Два раза кликаем на кнопку Button3 и вставляем код с циклом while в обработчик события.

Циклы – наше все. Нельзя представить себе более или менее серьезную программу, в которой не использовались бы циклы.

Сегодня бы хотел Вас познакомить с циклом for. Но для начала я хотел бы рассказать, для чего вообще нужны циклы. Как можно догадаться из названия цикл – это некая конструкция, которая выполняется определенное количество раз (циклично). Выполняется до тех пор, пока не наступит какое-то, заданное нами, условие.

Как работает forв Delphi?

Пример использования цикла for:

Давайте разберем пример. Найдем сумму чисел от 0 до 10. Логика будет следующая:

  1. Объявим две переменные типа integer. Одна – счетчик, вторая – для хранения суммы.
  2. Переменную для суммы приравняем к нулю.
  3. Запишем цикл, который будет перебирать цифры от 0 до 10 и прибавлять их к сумме.

Код будет выглядеть следующим образом:

Если в цикле нужно выполнить несколько действий, нужно объединять их в логические скобки (begin-end).

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

Мне надо что бы я когда водил число в едит1 и в эдит два по нажатию кнопки.. эти числа в едит 1 и в эдит два.. повторились допустим 3 раза в лабел1.. НЕ пойму что и как. завожу 4 переменно.. две из них присваиваю к едит 1 и 2. а в цикле указываю, for q := 1 (типа начало операции от 1 повторения) to g(ну типа я g присвоил 5) и дальше ду и указываю.. повторить и вывести.. Но прога выводит только цифры из эдит1 и 2 один раз. В данном цикле я вообще не понимаю что он делает и откуда цифра 6.

Потом я пишу цикл который чередует строчки из лист бокса 1 и листбокса в в ЛБ 3.. но получается так.. что у меня сначала из ЛБ1 первая строчка проочередуется со всеми строчками из Лб2 потом вторая строчка из лб1 проочередуется из лб 2 со всеми строчками.. не поиму как сделать так.. что бы файлы вообще сами чередовались. Ну на скрине у меня вон как получается

или как вообще сделать так.. что бы предположим.. лб2.. рассортирововал список лб1 в лб3.. через 2 -3 или n число строк. ну допусти.. первая и вторая строчка лб1 третия лб2-1 потом лб1-4,5 и лб2-2. НЕ поиму вообще просто хочу научиться, чтоб запомнить. Там скорее всего надо типа вводить после for to do - begin, а после begin типа if.. но как воспользоваться пока ума не приложу.. сори сразу если.. ооочень тупой вопросы

Читайте также: