5.6. Инструкция while
5.6. Инструкция while
Синтаксис инструкции while следующий:
while ( условие )
инструкция
Пока значением условия является true, инструкция выполняется в такой последовательности:
* Вычислить условие.
* Выполнить инструкцию, если условие истинно.
* Если самое первое вычисление условия дает false, инструкция не выполняется.
Условием может быть любое выражение:
bool quit = false;
// ...
while ( ! quit ) {
// ...
quit = do_something();
}
string word;
while ( cin word ){ ... }
или объявление с инициализацией:
while ( symbol *ptr = search( name )) {
// что-то сделать
}
В последнем случае ptr видим только в блоке, соответствующем инструкции while, как это было и для инструкций for и switch.
Вот пример цикла while, обходящего множество элементов, адресуемых двумя указателями:
int sumit( int *parray_begin, int *parray_end )
{
int sum = 0;
if ( ! parray_begin || ! parray_end )
return sum;
while ( parray_begin != parray_end )
// прибавить к sum
// и увеличить указатель
sum += *parray_begin++;
return sum;
}
int ia[6] = { 0, 1, 2, 3, 4, 5 };
int main()
{
int sum = sumit( ia[0], ia[ 6 ] );
// ...
}
Для того чтобы функция sumit() выполнялась правильно, оба указателя должны адресовать элементы одного и того же массива (parray_end может указывать на элемент, следующий за последним). В противном случае sumit() будет возвращать бессмысленную величину. Увы, С++ не гарантирует, что два указателя адресуют один и тот же массив. Как мы увидим в главе 12, стандартные универсальные алгоритмы реализованы подобным же образом, они принимают параметрами указатели на первый и последний элементы массива.
Упражнение 5.11
Какие ошибки допущены в следующих циклах while:
(a)
string bufString, word;
while ( cin bufString word )
// ...
(b)
while ( vectorint::iterator iter != ivec.end() )
// ...
(c)
while ( ptr = 0 )
ptr = find_a_value();
(d)
while ( bool status = find( word )) {
word = get_next_word();
if ( word.empty() )
break;
// ...
}
if ( ! status )
cout "Слов не найдено ";
Упражнение 5.12
while обычно применяется для циклов, выполняющихся, пока некоторое условие истинно, например, читать следующее значение, пока не будет достигнут конец файла. for обычно рассматривается как пошаговый цикл: индекс пробегает по определенному диапазону значений. Напишите по одному типичному примеру for и while, а затем измените их, используя цикл другого типа. Если бы вам нужно было выбрать для постоянной работы только один из этих типов, какой бы вы выбрали? Почему?
Упражнение 5.13
Напишите функцию, читающую последовательность строк из стандартного ввода до тех пор, пока одно и то же слово не встретится два раза подряд либо все слова не будут обработаны. Для чтения слов используйте while; при обнаружении повтора слова завершите цикл с помощью инструкции break. Если повторяющееся слово найдено, напечатайте его. В противном случае напечатайте сообщение о том, что слова не повторялись.
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
5.2.9.2. Инструкция OPEN
5.2.9.2. Инструкция OPEN OPEN cursor_nameЭта инструкция открывает предварительно объявленный
5.2.9.3. Инструкция FETCH
5.2.9.3. Инструкция FETCH FETCH cursor_name INTO var_name [, var_name] …Эта инструкция выбирает следующую строку (если строка существует), используя определенный открытый курсор, и продвигает указатель курсора.Если больше нет доступных строк, происходит условие No Data со значением SQLSTATE 02000. Чтобы
5.2.9.4. Инструкция CLOSE
5.2.9.4. Инструкция CLOSE CLOSE cursor_nameЭта инструкция закрывает предварительно открытый курсор. Если курсор не закрыт явно, он все равно закроется в конце составной инструкции, в которой он был
5.2.10.1. Инструкция IF
5.2.10.1. Инструкция IF IF search_condition THEN statement_list[ELSEIF search_conditionTHEN statement_list] …[ELSE statement_list]END IFIF реализован как базисная условная конструкция. Если выражение search_condition истинно, соответствующий список инструкции SQL выполнен. Если пары search_condition не нашлось, будет выполнен операторный
5.2.10.2. Инструкция CASE
5.2.10.2. Инструкция CASE CASE case_value WHEN when_valueTHEN statement_list[WHEN when_value THEN statement_list] …[ELSE statement_list]END CASEИли: CASE WHEN search_condition THEN statement_list[WHEN search_condition THEN statement_list] …[ELSE statement_list]END CASEИнструкция CASE для сохраненных подпрограмм осуществляет сложную условную конструкцию. Если search_condition равно true,
5.2.10.4. Инструкция LEAVE
5.2.10.4. Инструкция LEAVE LEAVE labelЭта инструкция используется, чтобы из выйти любой помеченной конструкции управления потоком данных. Это может использоваться внутри BEGIN … END или же конструкций цикла (LOOP, REPEAT,
5.2.10.5. Инструкция ITERATE
5.2.10.5. Инструкция ITERATE ITERATE labelITERATE может появляться только внутри инструкций LOOP, REPEAT и WHILE. ITERATE означает "выполнить цикл снова ".Пример:CREATE PROCEDURE doiterate(p1 INT)BEGINlabel1: LOOPSET p1 = p1 + 1;IF p1 < 10 THEN ITERATE label1;END IF;LEAVE label1;END LOOP label1;SET @x =
5.2.10.6. Инструкция REPEAT
5.2.10.6. Инструкция REPEAT [begin_label:]REPEAT statement_listUNTIL search_conditionEND REPEAT[end_label]Операторный список внутри инструкции REPEAT повторен, пока search_condition равно true. Таким образом, REPEAT всегда проходит цикл по крайней мере один раз. Перечень statement_list состоит из одной или большего числа инструкций.
5.2.10.7. Инструкция WHILE
5.2.10.7. Инструкция WHILE [begin_label:]WHILE search_condition DO statement_listEND WHILE[end_label]Операторный список внутри инструкции WHILE повторен, пока search_condition равно true. Инструкция WHILE может быть помечена. Пример:CREATE PROCEDURE dowhile()BEGINDECLARE v1 INT DEFAULT 5;WHILE v1 > 0 DO…SET v1 = v1 – 1;END
5.8. Инструкция break
0
Инструкция создания
Инструкция создания Рассмотрим создание экземпляра класса BOOK3. Это возможно только с помощью подпрограммы класса, являющегося клиентом BOOK3, как, например:class QUOTATION featuresource: BOOK3page: INTEGERmake_book is-- Создание объекта BOOK3 и присоединение его к source.do... См. ниже ...endendЭтот класс
Инструкция утверждения
Инструкция утверждения Утверждения, рассматриваемые до сих пор - предусловия, постусловия, инварианты, - это основные составляющие метода. Они устанавливают связь между конструкциями ОО-программных систем и теорией АТД, лежащей в основе метода. Инварианты класса, в