Главная страница
Библиотека (скачать книги)
Скачать софт
Введение в программирование
Стандарты для C++
Уроки по C#
Уроки по Python
HTML
Веб-дизайн
Ассемблер в среде Windows
ActiveX
Javascript
Общее о Линукс
Линукс - подробно
Линукс - новое
Delphi
Паскаль для начинающих
Турбопаскаль
Новости
Партнеры
Наши предложения
Архив новостей





Дойдя до цикла, программа сразу выполняет выражение-инициализатор, которое устанавливает начальное значение счетчика цикла. Затем анализируется условие, которое называется еще условием прекращения цикла. Пока оно истинно, цикл будет выполняться. Каждый раз после прохождения тела цикла выражение-модификатор изменяет счетчик цикла. Если проверка условного выражения дает FALSE, происходит выход из цикла и выполняются операторы, непосредственно следующие за for.

Представление оператора в языках Delphi и С++ отличается. Вначале рассмотрим конструкцию цикла for в Delphi. Имеются два варианта реализации этого цикла в зависимости от направления изменения модификатора цикла:
for Counter := First to Last // для случая, когда Last > First
for Counter := First downto Last // для случая, когда Last < First

В Visual С + + цикл for имеет единое представление независимо от направления изменения модификатора:
for (инициализатор; условие; модификатор)

Чаще всего цикл for используется для математических вычислений итерационного типа с постоянным приращением на каждой итерации с заранее известным числом повторений или для поиска элементов массивов или строк. Продемонстрируем применение цикла for на следующем примере.
Пусть требуется найти сумму первых 7 элементов массива, состоящего из 10 целых чисел.
Вариант программного кода для этой задачи в Delphi представлен в листинге 3.8.
Листинг 3.8. Фрагмент кода на Delphi с использованием цикла for
var
XI: array[1..10] of Integer = (4, -6,. 43, -5, 22, -78, 90, 56, 1, -43);
1X1: Integer;
SXI: Integer;
SUMX1: Integer;
begin
SUMX1 := 0;
SXI := SizeOf(Xl) div 4;
for 1X1 := 1 to SXI do
SUMX1 := SUMX1+X1[1X1];
end;


В С++ .NET тот же фрагмент кода мог бы выглядеть так, как представлено в листинге 3.9.
Листинг 3.9. Фрагмент кода на С++ с использованием цикла for
int il[10] = {3, -5, 2, 1, -9, 1, -3, -7, -11, 15};
int isum = 0;
for (int cnt = 0; cnt < 7; cnt++)
{
isum = isum + il[cnt];
}

Цикл for на ассемблере удобно реализовать с помощью команды loop. В этом случае переменная цикла помещается в регистр ЕСХ. Фрагмент кода для нахождения суммы первых семи элементов массива на ассемблере приведен в листинге 3.10.
Листинг 3.10. Фрагмент кода на ассемблере, реализующий цикл for
. data
il
isum
. code
start:
mov
xor
lea
next:
add
add
loop
mov
DD 3, -5, 2, 7, -9, 1, -3, -7, -11, 15
DD 0
ECX, 7
EAX, EAX
ESI, DWORD PTR il
EAX, [ESI]
ESI, 4
next
DWORD PTR isum, EAX
end start

3.1.5. Условный оператор case
Условный оператор case позволяет осуществить выбор одного варианта из нескольких возможных без использования конструкций if.. .else. В операторе case проверяемая переменная обязана принадлежать к перечисляемому типу. Использование других типов не допускается. Оператор case широко используется в Pascal (Delphi) для организации множественных ветвлений.
Структуру этого оператора можно представить в виде:
case N of
N1: <оператор 1>
N2: <оператор 2>
NN: <оператор N>

Чтобы реализовать оператор case на ассемблере, можно использовать сравнение для каждого случая с переходом на соответствующую метку в программе (листинг 3.11).
Листинг 3.11. Фрагмент кода на ассемблере, реализующий оператор case
mov ЕАХ, DWORD PTR N
cmp EAX, VALUE_1
je BRANCH_1
cmp EAX, VALUE_2
je BRANCH_2
cmp EAX, VALUE_3
je BRANCH_3
cmp EAX, VALUE_N
je BRANCH_N
BRANCH_1:
<операторы>
BRANCH_2:
<операторы>
BRANCH_N:
<операторы>


 
 
 

Библиотека программиста. 2009.
Администратор: admin@programmer-lib.ru