Файл: Классификация языков программирования высокого уровня (Языки Символического Кодирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 06.04.2023

Просмотров: 78

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Для описания структур управления программист может использовать также ключевые слова, как if, while; последовательности машинных команд, соответствующие этим описаниям компилятор генерирует динамически. (Г., 1982)[58]

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

3. ЦИКЛИЧЕСКИЕ КОНСТРУКЦИИ В ЯЗЫКАХ ВЫСОКОГО УРОВНЯ

3.1. Алгоритмическая структура цикла

Цикл - это такая форма организации действий, при которой одна последовательность действий повторяется несколько раз (или ни разу), до тех пор, пока выполняются некоторые условия. В aлгоритмические структуры цикл входит серия команд, выполняемая многократно. Такая последовательность команд называется телом цикла. Циклические алгоритмические структуры бывают двух видов:

- циклы со счетчиком, в которых тело цикла выполняется определенное количество раз;

- циклы с условием, в которых тело цикла выполняется до тех пор, пока выполняется условие.

Они все состоят из нескольких этапов:

- подготовка цикла, в которую входят начальные присвоения;

- тело цикла - команды повторения цикла;

- условие - обязательная часть цикла “Пока” (П.Терренс, 1979 )[59]

Циклической конcтрукцией со счетчиком является цикл “For или Для”, его используют, когда заранее известно, какое число повторений тела цикла необходимо выполнить.

Цикл “While” является циклической конструкцией с условием, т.е. это такой цикл, где тело цикла выполняется до тех пор, пока выполняются некоторые условия.

Наиболее часто в алгоритмах и программах применяются два вида циклов. Это циклы “ While или Пока” и “ For или Для ”. (Б.В. Керниган, 1985)[60]

Циклы очень часто используют в прикладных программах и алгоритмах. Для того чтобы понять принципы циклов, рассмотрим их в языках программирования высокого уровня.


3.2 Циклы в языке С

В языке C применяются такие циклические конструкции: while,for.

Цикл while это цикл, в котором тело повторяется несколько рaз до тех пор, пока истинно условие. Чтобы цикл окончился, оператор-тело цикла должен менять какую-то переменную, от которой зависит истинность условия повторений. (Уэйт, 1995)[61]

Его конструкция выглядит таким образом:

while(условие){ оператор;}

...продолжение...

или

while(условие){

операторы; ... }

...продолжение...

Пример цикла:

int x;

x = 10;

While (x > 0) { Printf ("x=%d\n", x);

x = x - 1;} printf("Конец.\n");

printf("x стало равно %d.\n", x);/* печатает 0 */

Цикл for ("для каждого") Этот цикл является просто иной записью одного из вариантов цикла while. Он служит обычно для выполнения определенного действия несколько раз, не "пока истинно условие", а "выполнить N-раз". У такого циклa есть "переменная цикла" или "счетчик повторений". (Малютин Э.А., 1982)[62]

int i;

i = a; /* начальная инициализация */

while(i < b){ тело_цикла;

i += c; /* увеличение счетчика */}

...продолжение...

int i;for(i=a; i < b; i += c) тело_цикла;

Тело_цикла будет выполнено для значений i

a

a+c

a+c+c

...

пока i < b

В простейшем случае:

for(i=1; i <= N; i++)

Printf ("i=%d\n", i)

i означает "номер повторения".

Такой цикл служит для повторения схожих действий несколько раз с разным знaчением параметра. Оператор break заставляет прервать выполнение тела цикла и сразу перейти к продолжению программ

While (условие1) {

операторы1; if (условие2)

break; операторы2;}

...продолжение...и

for(i=0; условие1; i++){ операторы1;

if(условие2) break;операторы2; }

...продолжение...

Этот оператор позволяет организовывать дополнительные точки выхода из цикла (при дополнительных условиях). (Ручко., 2004)[63]

Пример:

for (i=0; i < 20; i++){

Printf ("i=%d\n", i);

if (i == 7){ Printf ("break loop! \n");

break; /* вывалиться из цикла */ }

printf("more\n");}

Printf ("finished, i=%d\n", i); /* печатает 7 */

В частности, с его помощью можно организовывать бесконечный цикл: for (;;){ /* заголовок бесконечного цикла */

операторы1;

if (условие2)

break;

операторы2; } ...продолжение...

Здесь в самом заголовке цикла не проверяется никаких условий, такой цикл продолжается бесконечно. Условие продолжения считается всегда истинным. Единственный cпособ выйти из него - это сделать break (при каком-то условии) в теле цикла, что и написано . (Курносов А.П., и др., 2005) (В.В., 1999)[64]


Бесконечный цикл можно также организовать при помощи:

while(1){...}

3.3 Циклы в языке С++

Предположим, нам нужно вычислить сумму всех целых чисел от 0 до 100. Для этого воспользуемся оператором цикла for:

int sum = 0;

int i;

for (i = 1; i <= 100; i = i + 1)

// заголовок цикла

sum = sum + i; // тело цикла

Оператор цикла состоит из заголовка цикла и тела цикла. Тело цикла – это оператор, который будет повторно выполняться (в данном случае – увеличение значения переменной sum на величину переменной i). Заголовок – это ключевое слово for, после которого в круглых скобках записаны три выражения, разделенные точкой c запятой. Первое выражение вычисляется один раз до начала выполнения цикла. Второе – это условие цикла. Тело цикла будет повторяться до тех пор, пока условие цикла истинно. Третье выражение вычисляется после каждого повторения тела цикла. (Н.В, 1997)[65]

Оператор for реализует фундаментальный принцип вычислений в программировании – итерацию. Тело цикла повторяется для разных, в данном случае последовательных, значений переменной i. Повторение иногда называется итерацией. Мы как бы проходим по последовательности значений переменной i, выполняя с текущим значением одно и то же действие, тем самым постепенно вычисляя нужное значение. Любое из трех выражений в заголовке цикла может быть опущено (в том числе и все три). То же самое можно записать следующим образом:

int sum = 0;

int i = 1;

for (; i <= 100; ) {

sum = sum + i;

i = i + 1; }

Заметим, что вместо одного оператора цикла мы записали несколько операторов, заключенных в фигурные скобки – блок. (С.В., 2000)[66]Другой вариант:

int sum = 0;

int i = 1;

for (; ;) {

if (i > 100)

break; sum = sum + i;

i = i + 1; }

В последнем примере мы опять встречаем оператор break. Оператор break завершает выполнение цикла. Еще одним вспомогательным оператором при выполнении циклов служит оператор продолжения continue. Оператор continue заставляет пропустить остаток тела цикла и перейти к cледующей итерации (повторению). Например, если мы хотим найти сумму всех целых чисел от 0 до 100, которые не делятся на 7, можно записать это так:

int sum = 0;

for (int i = 1; i <= 100; i = i+1) {

if ( i % 7 == 0)

continue; sum = sum + i; }

Еще одно полезное свойство цикла for: в первом выражении заголовка цикла можно объявить переменную. Эта переменная будет действительна только в пределах цикла. (Б.В. Керниган, 1985)[67]Другой формой оператора цикла является оператор while. Его форма следующая:


while (условие) оператор

Условие – как и в условном операторе if – это выражение, которое принимает логическое значение "истина" или "ложь". Выполнение оператора повторяется до тех пор, пока значением условия является true (истина). Условие вычисляется заново перед каждой итерацией. Подсчитать, сколько десятичных цифр нужно для записи целого положительного числа N, можно с помощью следующего фрагмента:

int digits =0;

while (N > 0) {

digits = digits + 1;

N = N / 10;}

Третьей формой оператора цикла является цикл do while. Он имеет форму:

do { операторы } while ( условие);

Отличие от предыдущей формы цикла while заключается в том, что условие проверяется после выполнения телa цикла. Предположим, требуется прочитать символы с терминала до тех пор, пока не будет введен символ "звездочка". (Дж.Бишоп, и др., 2005)[68]

char ch;

do {

ch = getch(); // функция getch возвращает

// символ, введёный с

// клавиатуры

} while (ch != '*');

В операторах while и do также можно использовать операторы break и continue. Как легко заметить, операторы цикла взаимозаменяемы. Оператор while соответствует оператору for:

for ( ; условие ; ) оператор

Пример чтения символов с терминала можно переписать в виде:

char ch;

ch = getch();

while (ch != '*') {

ch = getch();}

Разные формы нужны для удобства и наглядности записи 

3.4 Циклы в языке Java

В языке программирования java, как и в других языках программирования, используются такие циклические конструкции как while, for, do while.

Основной оператор цикла в языке Java— оператор while— выглядит так:

while (лог.Вьгр) оператор (Г., 1982)[69]

Вначале вычисляется логическое выражение; если его значение true, то выполняется оператор, образующий цикл. Затеем, снова вычисляется лог.выр. и действует оператор, и так до тех пор, пока не получится значение false. Если логическое выражение изначально равняется false, то оператор не будет выполнен ни разу. Предварительная проверка обеспечивает безопасность выполнения циклa, позволяет избежать переполнения, деления на нуль и других неприятностей. Поэтому оператор while является основным, а в некоторых языках и единственным оператором цикла.

Оператор в цикле может быть и пустым, например, следующий фрагмент кода:

int i = 0;

double s = 0.0;

while ((s += 1.0 / ++i) < 10);

вычисляет количество i сложений, которые необходимо сделать, чтобы гармоническая сумма s достигла значения 10. Такой стиль характерен для языка С. Можно организовать и бесконечный цикл:


while (true) оператор

Конечно, из такого цикла следует предусмотреть какой-то выход, например, оператором break, как в листинге 1.5. В противном случае программа зациклится, и вам придется прекращать ее выполнение. (П.Терренс, 1979 )[70]

Если в цикл надо включить несколько операторов, то следует образовать блок операторов {}.

Другой оператор цикла — оператор do-while — имеет вид do оператор while (лог.Выр)

Здесь сначала выполняется оператор, а потом происходит вычисление логического выражения логического выражения.В цикле do-while проверяется условие продолжения, а не окончания цикла. Существенное различие между этими двумя операторами цикла только в том, что в цикле do-while оператор обязательно выполнится хотя бы один раз. Например, пусть задана какая-то функция f(x), имеющая на отрезке, [о; b] ровно один корень. Ниже представлена эта программа:

class Bisection{

static double f(double x){

return x*x*x — 3*x*x +3; }

// Или что-то другое public static void main(String!] args){double a = 0.0, b = 1,5, с, y, eps = le-8;

do{с = 0.5 *(a + b); у = f(с);

if (Math.abs(y) < eps) break;// Корень найден. Выходим из цикла// Если на концах отрезка [а; с] // функция имеет разные знаки: if (f (а) * у < 0.0) b = с;

//Значит, корень здесь. Переносим точку b в точку с

//В противном случае: else а * с;

// Переносим точку а в точку с// Продолжаем, пока отрезок [а; Ь] не станет мал } while (Math, abs (b-a) >= eps); System.out.println("x = " +c+ ", f(" +c+ ") = " +y) }}

И еще один оператор цикла — оператор for — выглядит так:

Перед выполнением цикла вычисляется список выражений список. Это нуль или несколько выражений, перечисленных через запятую. Они вычисляются слева направо, и в следующем выражении уже можно использовать результат предыдущего выражения. Как правило, здесь задаются начальные значения переменным цикла. (Р.А., 2005)[71]

Затем вычисляется логическое выражение лог.выр. Если оно истинно, true, то действует оператор, потом вычисляются слева направо выражения из списка выражений списокВыр2. Далее снова проверяется лог.выр. Если оно истинно, то выполняется оператор и списокВыр2 и т. д. Как только лог.выр станет равным false, выполнение цикла заканчивается. Короче говоря, выполняется последовательность операторов.

Любая часть оператора for может отсутствовать: цикл может быть пустым, выражения в заголовке тоже, при этом точки с запятой сохраняются. Можно задать бесконечный цикл:

for (;;) оператор

В этом случае в теле цикла следует предусмотреть какой-нибудь выход. (Малютин Э.А., 1982)[72]