« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга


ПнВтСрЧтПтСбВс
      1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31  
    Популярное
Функция AccessResource

Perl и работа с сокетами

Глава 2.Общие проблемы разработки программ

Как защитить от копирования текст на вашем сайте

Глава 7. Linux на службе

jQuery News Slider - скользящие новости

Функция GetScrollRange

Google для программистов

Зависимости

URLEncode и URLDecode в Delphi




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 179
Пользователей: 0

Статьи:: Delphi :: Delphi 7 начинающему :: Глава 2. Управляющие структуры языка Delphi :: Инструкция for



отправить ссылку другу версия для печати  Обсудить на форуме

Инструкция for



Инструкция for

Рассмотрим следующую задачу. Пусть нужно написать программу, которая вычисляет значение функции у = 5х2 - 7 в точках —1, -0.5, 0, 0.5 и 1

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

procedure TForm1.ButtonlClick(Sender: TObject); var

у: real; // значение функции

x: real; // аргумент функции

dx: real; // приращение аргумента

st: string; // изображение таблицы

begin

st:='';

x := -1; dx := 0.5;

у := 5*х*х -7;

st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);

x :=x + dx;

у := 5*х*х -7;

st := st+ FloatToStr(x)+* '+ FloatToStr(y)+chr(13);

x :=x + dx;

у := 5*х*х -7;

st := st+ FloatToStr(x)+* '+ FloatToStr(y)+chr(13);

x :=x + dx;

у := 5*х*х -7;

st := st+ FloatToStr(x)+' ' + FloatToStr(y)+chr(13);

x :=x + dx;

у := 5*х*х -7;

st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);

x :=x + dx;

Label1.Caption := st;

end;

Из текста процедуры видно, что группа инструкций

у := 5*х*х -7;

st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13);

x :=x + dx;

обеспечивающая вычисление значения функции, формирование строки таблицы и увеличение аргумента, выполняется 5 раз.

Воспользовавшись инструкцией for, приведенную процедуру можно переписать следующим образом:

procedure TForm1.ButtonlClick(Sender: TObject);

var

у: real; // значение функции

x: real; // аргумент функции

dx: real; // приращение аргумента

st: string; // изображение таблицы

i : integer; // счетчик циклов

begin

st:=''; x := -1; dx := 0.5;

for i:=l to 5 do begin

у := 5*x*x -7;

st := st+ FloatToStr(x)+' '+ FloatToStr(y)+chr(13); x :=x + dx; end;

Label1.Caption := st;

end;

Второй вариант процедуры, во-первых, требует меньше усилий при наборе, во-вторых, процедура более гибкая: для того чтобы увеличить количество строк в выводимой таблице, например до десяти, достаточно в строке for i:=1 to 5 do число 5 заменить на 10.

Инструкция for используется в том случае, если некоторую последовательность действий (инструкций программы) надо выполнить несколько раз, причем число повторений заранее известно.

В общем виде инструкция for записывается следующим образом: for счетчик := нач_знач to кон_знач do begin

// здесь инструкции, которые надо выполнить несколько раз end

где:

  • счетчик — переменная-счетчик числа повторений инструкций цикла;
  • нач_знач-- выражение, определяющее начальное значение счетчика циклов;
  • кон_знач — выражение, определяющее конечное значение счетчика циклов.

Переменная счетчик, выражения нач_знач и кон_знач должны быть целого типа.

Количество повторений инструкций цикла можно вычислить по формуле

(кон_знач — нач_знач + l).

Примеры:

for i:=l to 10 do begin

label1.caption:=label1.caption + '*'; end;

for i: =1 to n do s := s+i;

Примечание

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

Рис. 2.13. Алгоритм инструкции for

Алгоритм, соответствующий инструкции for, представлен на рис. 2.13. Обратите внимание, что если начальное значение счетчика больше конечного значения, то последовательность операторов между begin и end не будет выполнена ни разу.

Кроме того, после каждого выполнения инструкций тела цикла счетчик циклов увеличивается автоматически.

Переменную-счетчик можно использовать внутри цикла (но ни в коем случае не изменять). Например, в результате выполнения следующих инструкций:

tab1: = '' ;

for i:=l to 5 do

begin

tab1:=tabl+IntToStr(i)+' '+IntToStr(i*i)+chr(13);

end;

переменная tabl будет содержать изображения таблицы квадратов чисел.

Рассмотрим программу, которая вычисляет сумму первых 10 элементов ряда: 1 + + 1/3 + ... (значение i-го элемента ряда связано с его номером формулой 1//). Диалоговое окно программы должно содержать, по крайней мере, два компонента: поле метки (Label1) и командную кнопку (Buttonl).

Вычисление суммы ряда и вывод результата выполняет процедура обработки события Onclick, текст которой приведен ниже. После вычисления очередного элемента ряда процедура выводит в поле Labell номер элемента и его значение в поле метки формы, предназначенное для вывода результата.

procedure TForm1.ButtonlClick(Sender: TObject);

var

i:integer; { номер элемента ряда }

elem:real;

{ значение элемента ряда }

summ:real;

{ сумма элементов ряда )

begin

summ:=0;

label Leapt ion: = ' ' ;

for i:=l to 10 do begin

elem:=l/i;

label1.caption:=labell.caption+

IntToStr(i)+' '+FloatToStr(elem)+#13; sunrn: =summ+elem;

end;

label1.caption:=label1.caption+

'Сумма ряда:'+FloatToStr(summ);

end;

Если в инструкции for вместо слова to записать downto, то после очередного выполнения инструкций тела цикла значение счетчика будет не увеличиваться, а уменьшаться.





{BLOCK|article|lastarticle||non.tpl}

Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия