Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Модуль Forms 65535
Имитационное мо... 60784
Реклама
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 13,122
новичок: BenderSergey1969
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Лабораторная работа по динамическим спискам на Turbo Pascal (перемещение...
Моделирование станции технического обслуживания на GPSS + Отчет
Моделирование регулировочного участка цеха на GPSS + Пояснительная записка

Реклама



Подписывайся на YouTube канал о программировании, что бы не пропустить новые видео!

ПОДПИСЫВАЙСЯ на канал о программировании
Оператор цикла for


В случаях, когда число повторений может быть заранее известно, для организации циклической обработки информации применяется оператор повтора for. Часто этот оператор повтора называют оператором цикла с параметром, так как число повторений задается переменной, называемой параметром цикла, или управляющей переменной.
Оператор повтора for состоит из заголовка и тела цикла.
Данный оператор может быть представлен в двух форматах:
for <параметр цикла> :== to do <оператор>;
for <параметр цикла> := downto do <оператор>;



где Sl и S2 — выражения, определяющие соответственно начальное и конечное значе-ния параметра цикла;
for ... do — заголовок цикла;
<оператор>—тело цикла.
Тело цикла может быть простым или составным оператором. Оператор for обеспечивает выполнение тела цикла до тех пор, пока не будут перебраны все значения параметра цикла от начального до конечного.
Заголовок оператора повтора for определяет:
• диапазон изменения значений управляющей переменной (параметра цикла) и одновременно число повторений оператора, содержащегося в теле цикла;
• направление изменения значения параметра цикла (возрастание — to или убывание — downto).

Пример.
for I:= 1 to 100 do Read (M[I]); {Чтение элементов массива}
for I:= 100 downto 1 do Write (M[I]); {Вывод элементов массива}



При первом обращении к оператору for вначале вычисляются выражения S1, S2 и осуществляется присваивание
<параметр цикла>:=S1.



После этого циклически повторяются следующие действия.
1. Проверяется условие
<параметр цикла>:<=82.



2. Если условие выполнено, то оператор for продолжает работу (выполняется оператор в теле цикла), если условие
<параметр цикла>:<=82


не выполнено, то оператор for завершает работу, и управление в программе передается на опера-тор, следующий за циклом.
3. Значение управляющей переменной изменяется на +1 (to) или —1 (downto) и далее с п. 1. Обратите внимание, что шаг изменения управляющей переменной — единица.
На использование управляющей переменной (параметра цикла) в цикле for налагаются следующие ограничения.
1. В качестве параметра должна использоваться простая переменная, описанная в текущем блоке.
2. Управляющая переменная должна иметь дискретный тип (как правило, integer).
3. Начальные и конечные значения диапазона должны иметь тип, совместимый с типом управляющей переменной. При этом допустим любой скалярный тип, кро¬ме вещественного.
4. В теле цикла запрещается явное изменение значения управляющей переменной (например, оператором присваивания).
5. После завершения оператора значение управляющей переменной становится неопределенным, если только выполнение оператора не было прервано операто-ром перехода.
Примером действия оператора for может служить программа DemoFor, которая выводит на экран таблицу перевода из градусов по шкале Цельсия(С) в градусы по Фаренгейту(Р) для значений от 15°С до 30°С с шагом 1 градус. Перевод осуществляется по формуле: F = С* 1.8+32.
program DemoFor;
var
I: integer ;
F: real;
begin
Writeln (' Температура ');
for I:= 15 to 30 do {Заголовок цикла с параметром}
begin {Начало тела цикла}
F:= I*1.8+32;
Writeln ('По Цельсию= ',I,' по Фаренгейту= ', F:5:2)
end; {Конец тела цикла}
end.



В блоке описания переменных описаны параметр цикла I типа integer и переменная F — температура по Фаренгейту типа real. Переменная I, помимо функций управляющей переменной, является переменной, хранящей целочисленные значения температуры по шкале Цельсия. В начале выполнения программы на экран выводится надпись 'Температура', а затем оператором повтора выводится таблица соотношения температуры в шкалах Цельсия и Фаренгейта. Печать таблицы выполняется оператором
Writeln ('По Цельсию= ',I,' по Фаренгейту= ', F:5:2)



Цикл выполняется следующим образом.
При первом обращении к оператору for вычисляются значения начального (15) и ко-нечного (30) параметров цикла, и управляющей переменной I присваивается начальное значение 15.
Затем циклически выполняется следующее:
1. Проверяется условие I<=30.
2. Если оно соблюдается, то выполняется составной оператор в теле цикла, т. е. рассчитывается значение выражения 1*1.8+32, затем оно присваивается переменной F, и на экран выводится сообщение
'По Цельсию= ',I,' по Фаренгейту= ', F:5:2



Если условие I<=30 не соблюдается, т. е. как только I станет > 30, оператор те¬ла цикла не выполняется, а управление в программе передается за пределы опера¬тора for, в нашем примере на оператор end;. Программа завершает работу.
3. Значение параметра цикла I увеличивается на единицу, и управление передается в заголовок цикла for для проверки условия.
Далее цикл повторяется с п.1.
Вторым примером оператора цикла for может служить программа, которая печатает на экране символы американского стандартного кода обмена информацией (ASCII) в порядке убывания кода.
program DemoASCII;
var
A: integer;
begin
for A:= 255 downto 0 do {Цикл с убыванием параметра}
Writeln ('код символа = ',А, ' символ = ', Chr(A));
end.



В данной программе применяется цикл for с убыванием значения управляющей переменной А (используется указание downto — убывание).
Рассмотрим пример программы, имитирующей арифметический калькулятор, которой используются операторы присваивания, условия и повтора.
program DemoCalc;
var
X, Y, Rezult : real;
Operation, Ans: char;
begin
repeat {Начало цикла с постусловием}
Write ('X = ');
Read (X); {Считывание первого операнда}
Write ('Y = ');
Readln (Y); {Считывание второго операнда}
Writeln ('операция (+, -, *, /) >');
Readln (Operation); {Считывание знака операции}
case Operation of {Выбор арифметического действия}
'+' : Rezult := X+Y;
'-' : Rezult := X-Y;
'*' : Rezult := X*Y;
'/' : Rezult := Х/Y;
else
Writeln ('Ошибка ввода');
end;
Writeln (X,Operation,Y,'=',Rezult); {Печать арифметического выражения}
Write ('Продолжить (Y/N)');
Readln (Ans); {Считывание ответа на вопрос}
Until (Ans='M') or (Ans='n'); {Проверка условия окончания цикла}
end.



В разделе описания переменных описаны переменные — операнды X, Y и результат арифметических операций Rezult вещественного типа, а также переменная Operation символьного типа, в которой хранится значение знака арифметической операции, и Ans — переменная символьного типа, которой присваивается значение "Y" или 'V".
Процесс выполнения арифметических операций калькулятором организован с помо-щью оператора repeat и продолжается до тех пор, пока переменной Ans не будет присвоено значение V или 'п'.
В теле цикла сначала запрашиваются и считываются с клавиатуры значения
операндов:
Write ('X = ');
Read (X);
Write ('Y = ');
Readln (Y);



затем запрашивается и считывается знак арифметической операции
Writeln ('операция (+, -, *, /) >');
Readln (Operation);



Оператор выбора case по значению переменной Operation (селектор) выбирает знак операции и в зависимости от его значения выполняет арифметическую операцию. Например, если значение переменной Operation равно значению константы выбора '—', то вы-полняется оператор присваивания Rezult := Х—Y и т. д. Если значение переменной Operation не равно ни одному значению константы выбора, то управление передается на опера-тор, стоящий за словом else, и на экран выводится сообщение 'Ошибка ввода'. Если знак операции был введен верно, то на экран выводится сообщение вида: 5 —3 = 2.
После этого на экран выводится запрос 'Продолжить (Y/N)' и с клавиатуры считывается значение переменной символьного типа Ans. Если значение выражения (Ans='N') or (Ans='n') будет False, то цикл повторится вновь, иначе цикл будет завершен и управление в программе будет передано на оператор end.
Опубликовал Kest Апрель 03 2010 21:42:31 · 2 Комментариев · 10215 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Татьяна Ноябрь 18 2010 11:28:02
Извините, но в Вашем коде с примерами, например, DemoCalc, есть досадные опечатки:
Rezult :*= Х/Y должно быть If Y<> 0 then Rezult := Х/Y;
И не лучше было бы вместо
Readln (Ans);
написать
Ans:=ReadKey ; ?
Также вызывает удивление такая запись <параметр цикла>:<=82... Знак ':' для чего? Может <параметр цикла><=82.
диана Декабрь 16 2010 09:13:56
smiley спасибо
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Расширенный загру...
Панель Календарь
Animation Effect ...
Платформа програм...
Песочные часы
Самоучитель C++
BIOS
Socoban
Библия хакера 2 К...
Page Promoter 7.7...
Распознавание тек...
XPmenu
Х. М. Дейтел, П. ...
API (Применение A...
C++ для начинающих
Игра змейка
Философия C++. Пр...
Degisy Data Acces...
UmEdit
Srinilist

Топ загрузок
Приложение Клие... 100532
Delphi 7 Enterp... 92135
Converter AMR<-... 20103
GPSS World Stud... 15543
Borland C++Buil... 13130
Borland Delphi ... 9196
Turbo Pascal fo... 7115
Калькулятор [Ис... 5221
Visual Studio 2... 5037
FreeSMS v1.3.1 3561
Случайные статьи
Открытие очереди
contoso
Запись видео на ф...
ГЛАВА 3. ИСПОЛЬЗ...
1.3.1. Объект Conn...
7.3. Ханойские башни
Простейший алгорит...
Поток без синхрони...
Степень улучшения ...
Выражения в списке...
Синтез нового объекта
4.3. СПОСОБЫ РАСПО...
Подсчет числа импу...
Можно работать!
Листинг 13.15. Фун...
Модель доступа к д...
Горилла ставки на ...
Жесткая кодировка ...
1.4. УСЛОВНЫЕ ОБОЗ...
Язык С: преобразов...
Жесты
Как расколоть орешек
Идея использования...
ОЦЕНКА НОВЫХ ВОЗМО...
atomic(X)
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?