Главная

Популярная публикация

Научная публикация

Случайная публикация

Обратная связь

ТОР 5 статей:

Методические подходы к анализу финансового состояния предприятия

Проблема периодизации русской литературы ХХ века. Краткая характеристика второй половины ХХ века

Ценовые и неценовые факторы

Характеристика шлифовальных кругов и ее маркировка

Служебные части речи. Предлог. Союз. Частицы

КАТЕГОРИИ:






Операторы break и continue. Бывает, что цель выполнения цикла достигается раньше, чем он будет прекращен по условию выхода




Бывает, что цель выполнения цикла достигается раньше, чем он будет прекращен по условию выхода. Так, например, в программе для определения простоты числа цикл будет выполняться n div 2-1 раз, хотя то, что число не является простым, может быть обнаружено на первых шагах цикла. Чтобы уменьшить количество шагов цикла, можно воспользоваться оператором goto, либо сформировать сложное условие выполнения (прекращения) цикла.

Однако существуют специальные операторы, использующиеся для прерывания хода выполнения цикла. Оператор break выполняет полный выход из цикла, т.е. все возможные итерации цикла прерываются. Оператор continue прерывает только текущую итерацию. Break и continue являются процедурами, хотя обычно их называют операторами.

Операторы break и continue выполняются в любом из видов циклов (repeat, while, for) и действительны только для внутреннего цикла. Например, если нужно обеспечить принудительный выход из двойного цикла, оператор break должен быть расположен как во внутреннем, так и во внешнем цикле. Операторы break и continueпо сути являются видоизмененными операторами goto с известной точкой, в которую осуществляется переход.

В примере у пользователя пять раз запрашивается число только в том случае, если он не вводит ноль.

Var

num: real;

i: integer;

 

Begin

for i:= 1 to 5 do begin

write ('Введите число: ');

readln (num);

if num = 0 then

break;

writeln (num)

end;

 

readln

end.

В примере запрашиваются пять чисел и суммируются только положительные из них.

Var

num, sum: real;

i: integer;

 

Begin

sum:= 0;

 

for i:= 1 to 5 do begin

write ('Введите число: ');

readln (num);

If num < 0 then

continue;

sum:= sum + num

end;

 

write (sum:10:2);

 

readln

end.

30. Команда break используется для выхода из текущего цикла.

Команда break может находиться в любом месте программы, однако обычно break ставиться в теле операторов while или do... while.

Пример 1.

#include < iostream.h > #include < stdlib.h >main() {exit(0); //заставляет программу завершиться в этом месте cout <<" С помощью C++ можно составлять высоко эффективные программы. \n"; cout <<" Удачи Вам. \n"; return 0; }

На первый взгляд кажется, что эта программа выдаст на экран несколько сообщений.

Но это заблуждение, т.к. функция exit в начале программы приведет к ее прерыванию.

Пример 2.

#include <iostream.h>#include <stdlib.h>// Проверка пароля, пользователю предоставляется 3 попытки.main() { int nash_p=4321; // пароль int k=0; // количество попыток int ego_p; // пароль введенный пользователемdo { cout <<"Введите пароль \n"; cin>> ego_p; k++; if (ego_p=nash_p) { cout <<"\n\nДобро пожаловать в программу!! "; exit(0); } else { (k<3)? (cout <<"\n Пароль не верен!!\n Попробуйте еще раз!! "); (cout <<"\n Пароль не верен!!"); } } while (k<3); return 0; }

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

31. Оператор CONTINUE родственен оператору BREAK, но используется реже; он приводит к началу следующей итерации охватывающего цикла (FOR, WHILE, DO). В циклах WHILE и DO это означает непосредственный переход к выполнению проверочной части; в цикле FOR управление передается на шаг реинициализации. (Оператор CONTINUE применяется только в циклах, но не в переключателях. Оператор CONTINUE внутри переключателя внутри цикла вызывает выполнение следующей итерации цикла).
В качестве примера приведем фрагмент, который обрабатывает только положительные элементы массива а; отрицательные значения пропускаются.

FOR (I = 0; I < N; I++) { IF (A[I] < 0) /* SKIP NEGATIVE ELEMENTS */ CONTINUE;... /* DO POSITIVE ELEMENTS */ }

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

32. Оператор выбора case

Оператор case используется для выбора одного из нескольких направлений дальнейшего хода программы. Этот оператор имеет вид:

case p of

a: s1;

b: s2;

..

n: sn;

else sn+1;

end;

При выполнении оператора case сначала вычисляется выражение p, называемое селектором выбора. Выражение p должно принадлежать типу данных, имеющему конечное число значений (например: integer). Затем, в зависимости от полученного значения (если оно равно одной из констант a, b, …, n, которые называются константами выбора), выполняется один из операторов s1, s2, …, sn, помеченный соответствующей константой. Каждый из этих операторов может быть составным. Затем управление передается следующему (после case) оператору в программе.

Если значение выражения p не совпадает ни с одной из констант выбора, выполняется оператор sn+1, содержащийся после ключевого слова else, причем ветвь else в операторе case необязательна.

Зарезервированные слова case, of, else и end имеют смысл вариант, из, иначе и конец.

Кроме одиночных констант в вариантах оператора case могут использоваться диапазоны значений и списки (представленные через запятую).

Пример использования оператора case:

program number; { Определение времени года по номеру месяца}

var

month: integer; {номер месяца}

begin

write (’Введите номер месяца:’);

readln (month);

writeln (‘Время года:’);

case month of

1, 2, 12: writeln (’зима’);

3..5: writeln (’весна’);

6..8: writeln (’лето’);

9..11: writeln (’осень’);

else writeln (’число должно быть от 1 до 12’);

end;

end.

33. Массивы - это совокупности однотипных элементов. Характеризуются они следующим:

  • каждый компонент массива может быть явно обозначен и к нему имеется прямой доступ;
  • число компонент массива определяется при его описании и в дальнейшем не меняется.

Для обозначения компонент массива используется имя переменной-массива и так называемые индексы, которые обычно указывают желаемый элемент. Тип индекса может быть только порядковым (кроме longint). Чаще всего используется интервальный тип (диапазон).

Описание типа массива задается следующим образом:

type

имя типа = array[ список индексов ] of тип

Здесь имя типа - правильный идентификатор; список индексов - список одного или нескольких индексных типов, разделенных запятыми; тип - любой тип данных.

Вводить и выводить массивы можно только поэлементно.

Пример 1. Ввод и вывод одномерного массива.

const

n = 5;

type

mas = array[1..n] of integer;

var

a: mas;

i: byte;

begin

writeln('введите элементы массива');

for i:=1 to n do readln(a[i]);

writeln('вывод элементов массива:');

for i:=1 to n do write(a[i]:5);

end.

Определить переменную как массив можно и непосредственно при ее описании, без предварительного описания типа массива, например:

var a,b,c: array[1..10] of integer;

Если массивы a и b описаны как:

var

a = array[1..5] of integer;

b = array[1..5] of integer;

то переменные a и b считаются разных типов. Для обеспечения совместимости применяйте описание переменных через предварительное описание типа.

Если типы массивов идентичны, то в программе один массив может быть присвоен другому. В этом случае значения всех переменных одного массива будет присвоены соответствующим элементам второго массива.

Вместе с тем, над массивами не определены операции отношения. Сравнивать два массива можно только поэлементно.

Так как тип, идущий за ключевым словом of в описании массива, - любой тип Турбо Паскаль, то он может быть и другим массивом. Например:

type

mas = array[1..5] of array[1..10] of integer;

Такую запись можно заменить более компактной:

type

mas = array[1..5, 1..10] of integer;

Таким образом возникает понятие многомерного массива. Глубина вложенности массивов произвольная, поэтому количество элементов в списке индексных типов (размерность массива) не ограничена, однако не может быть более 65520 байт.

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

for i:=1 to m do

for j:=1 to n do a[i,j]:=random(10);

Для "красивого" вывода матрицы на экран используйте такой цикл:

for i:=1 to m do begin

for j:=1 to n do write(a[i,j]:5);

writeln;

end;

Индекс массива

Номер элемента массива называется индексом. Индекс – это значение порядкового типа, определенного, как тип индекса данного массива. Очень часто это целочисленный тип (integer, word или byte), но может быть и логический и символьный.

Описание массива в Паскале. В языке Паскаль тип массива задается с использованием специального слова array (англ. – массив), и его объявление в программе выглядит следующим образом:

Type < имя _ типа >= array [ I ] of T;

где I – тип индекса массива, T – тип его элементов.

Можно описывать сразу переменные типа массив, т.е. в разделе описания переменных:

Var a,b: array [ I ] of T;

Обычно тип индекса характеризуется некоторым диапазоном значений любого порядкового типа: I 1.. I n. Например, индексы могут изменяться в диапазоне 1..20 или ‘ a ’..’ n ’.

При этом длину массива Паскаля характеризует выражение:

ord (I n)- ord (I 1)+1.

Вот, например, объявление двух типов: vector в виде массива Паскаля из 10 целых чисел и stroka в виде массива из 256 символов:

Type
Vector=array [1..10] of integer;
Stroka=array [0..255] of char;

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

Опишем переменные типа vector и stroka:

Var a: vector;
c: stroka;

далее в программе мы можем обращаться к отдельным элементам массива a или c. Например, a [5]:=23; c [1]:=’ w ’; a [7]:= a [5]*2; writeln (c [1], c [3]).

Вычисление индекса массива Паскаля

Индекс массива в Паскале не обязательно задавать в явном виде. В качестве индекса массива можно использовать переменную или выражение, соответствующее индексному типу. Иначе говоря, индексы можно вычислять.

Этот механизм – весьма мощное средство программирования. Но он порождает распространенную ошибку: результат вычислений может оказаться за пределами интервала допустимых значений индекса, то есть будет произведена попытка обратиться к элементу, которого не существует. Эта типичная ошибка называется «выход за пределы массива».






Не нашли, что искали? Воспользуйтесь поиском:

vikidalka.ru - 2015-2024 год. Все права принадлежат их авторам! Нарушение авторских прав | Нарушение персональных данных