Студопедия — Оператор WHILE
Студопедия Главная Случайная страница Обратная связь

Разделы: Автомобили Астрономия Биология География Дом и сад Другие языки Другое Информатика История Культура Литература Логика Математика Медицина Металлургия Механика Образование Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Туризм Физика Философия Финансы Химия Черчение Экология Экономика Электроника

Оператор WHILE






 

Циклическое выполнение задается с помощью оператора WHILE – выражения со стандартными словами WHILE и DO в следующей форме:

 

WHILE условие

DO

оператор DO

 

Если условие выполняется, Паскаль-машина выполняет оператор DO, после чего выполнение всего выражения WHILE повторяется до тех пор, пока выполняется условие.

Как правило, оператор WHILE записывается в вышеприведенном стиле, WHILE и DO на отдельных строках, оператор DO сдвинут вправо на два пробела. Это стандартный стиль написания программ, который облегчает их чтение.

 

Программа Copy использует оператор WHILE для любого количества символов из INPUT в OUTPUT. Символ # используется как маркер конца входных данных для остановки процесса копирования.

 

PROGRAM Copy (INPUT, OUTPUT);

{Копирует все символы, предшествующие #

из INPUT в OUTPUT}

VAR

Ch: CHAR;

BEGIN

READ(Ch);

WHILE Ch <> ‘#’

DO

BEGIN

WRITE(Ch);

READ(Ch)

END;

WRITELN

END.

 

INPUT: ABC#

OUTPUT: ABC

 

 

INPUT: Red#AZURE

OUTPUT: Red

 

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

Часть выполнения программы Copy для входных данных ABC# показана в таблице выполнения ниже. Значения не показаны в тех строках таблицы, где они не могут быть изменены.

 

Частичная таблица выполнения для программы Copy

  Условие INPUT OUTPUT Ch
BEGIN READ(Ch) WHILE Ch <> ‘#’ DO BEGIN WRITE(Ch) READ(Ch) END WHILE Ch <> ‘#’ DO BEGIN WRITE(Ch) READ(Ch) END WHILE Ch <> ‘#’ DO BEGIN WRITE(Ch) READ(Ch) END WHILE Ch <> ‘#’ WRITELN END.   Yes   Yes   Yes   No A BC# A B C#     AB C #   ABC # ABC#_ ABC# _     A_   AB_   ABC_   ABC/_ ABC ? A     B   C     #

 

Бесконечное выполнение

 

Оператор WHILE может войти в бесконечное выполнение если он написан неправильно. Например, если будет пропущен оператор READ в программе Copy.

 

WHILE Ch <> ‘#’

DO

BEGIN

WRITE(Ch)

END

 

Таким образом, условие в предложении WHILE должно контролировать выполнение и гарантировать завершение цикла.

 

1.5.3. Программы MaxOfAll и CopyOdds

 

Программа MaxOfAll определяет максимальный символ в INPUT предшествующий #. Предложение IF выводит в OUTPUT различные сообщения в зависимости от того, обнаружены ли там какие-либо данные. Значение переменной Max – найденный на текущий момент максимум. Концепция сохранения результата проверок в той переменной, которой выполняется сравнение, часто используется в программах. Когда выполнение оператора WHILE завершится, в переменной Max будет находиться максимальное из прочитанных значений.

 

PROGRAM MaxOfAll (INPUT, OUTPUT);

{Считывает символы, предшествующие #

из INPUT, наибольший выводится в OUTPUT}

VAR

Ch, Max: CHAR;

BEGIN

READ(Ch);

IF Ch = ‘#’

THEN

WRITELN(‘NO DATA’);

ELSE

BEGIN

WRITE(‘INPUT DATA IS ’);

Max:= Ch;

WHILE Ch <> ‘#’

DO

BEGIN

WRITE(Ch);

IF Ch > Max

THEN

Max:= Ch;

READ(Ch)

END;

WRITELN;

WRITELN(‘MAX OF ALL IS ’, Max);

END

END.

 

INPUT: AZURE#

OUTPUT: INPUT DATA IZ AZURE

: MAX OF ALL IS Z

 

INPUT: A#

OUTPUT: INPUT DATA IZ A

: MAX OF ALL IS A

 

INPUT: #AZURE

OUTPUT: NO DATA

 

 

Программа CopyOdds копирует символы из INPUT в OUTPUT через один. Программа использует переменную Next для того, чтобы отслеживать четность/нечетность очередного прочитанного символа.

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

 

PROGRAM CopyOdds (INPUT, OUTPUT);

{Копирует через один символы, предшествующие #

из INPUT в OUTPUT}

VAR

Ch, Next: CHAR;

{Next – преключатель между нечетными (Odd-‘O’)

и четными (Even-‘E’)}

BEGIN

Next:= ‘O’

READ(Ch);

WHILE Ch <> ‘#’

DO

BEGIN

IF Next = ‘O’

THEN {Копирование нечетных символов}

WRITE(Ch);

READ(Ch);

{Переключение Next}

IF Next = ‘O’

THEN

Next:= ‘E’ {Even}

ELSE

Next:= ‘O’

END;

WRITELN

END.

 

INPUT: AZURE#

OUTPUT: AUE

 

INPUT: A#BC

OUTPUT: A

 

INPUT: 123456789#

OUTPUT: 13579

 

INPUT: SEE CAR EAT#

OUTPUT: SECRET

 

Рассмотрим второй оператор IF внутри оператора WHILE

 

IF Next = ‘O’

THEN

Next:= ‘E’ {Even}

ELSE

Next:= ‘O’

 

Next может принимать только значения ‘O’ или ‘E’. Если текущее значение ‘O’ значением становится ‘E’, если текущее значение ‘E’ значением становится ‘O’. Таким образом, данный оператор IF заставляет работать переменную Next как переключатель ‘O’/’E’ (“flip-flop”).







Дата добавления: 2015-09-18; просмотров: 417. Нарушение авторских прав; Мы поможем в написании вашей работы!



Картограммы и картодиаграммы Картограммы и картодиаграммы применяются для изображения географической характеристики изучаемых явлений...

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

Функция спроса населения на данный товар Функция спроса населения на данный товар: Qd=7-Р. Функция предложения: Qs= -5+2Р,где...

Аальтернативная стоимость. Кривая производственных возможностей В экономике Буридании есть 100 ед. труда с производительностью 4 м ткани или 2 кг мяса...

Именные части речи, их общие и отличительные признаки Именные части речи в русском языке — это имя существительное, имя прилагательное, имя числительное, местоимение...

Интуитивное мышление Мышление — это пси­хический процесс, обеспечивающий познание сущности предме­тов и явлений и самого субъекта...

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

Типовые ситуационные задачи. Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт Задача 1.У больного А., 20 лет, с детства отмечается повышенное АД, уровень которого в настоящее время составляет 180-200/110-120 мм рт. ст. Влияние психоэмоциональных факторов отсутствует. Колебаний АД практически нет. Головной боли нет. Нормализовать...

Эндоскопическая диагностика язвенной болезни желудка, гастрита, опухоли Хронический гастрит - понятие клинико-анатомическое, характеризующееся определенными патоморфологическими изменениями слизистой оболочки желудка - неспецифическим воспалительным процессом...

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

Studopedia.info - Студопедия - 2014-2024 год . (0.013 сек.) русская версия | украинская версия