Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Оператор переходаGOTO. Цикл. Метки




End.

Begin

End.

Begin

Оператор вариантаcase

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

VAR Otmetka: Integer;

WriteLn ('Какую отметку ты получил по чистописанию?');

ReadLn (Otmetka);

CASE otmetka OF {Перевод: В СЛУЧАЕ ЕСЛИ отметка РАВНА...}

1,2:WriteLn('Кошмар!');
3:WriteLn('Неважно');

4:WriteLn('Неплохо');
5:WriteLn('Молодец!');

ELSE WriteLn('Таких отметок не бывает')

END {Конец оператора CASE}

Основой программы является оператор варианта CASE (читается "кэйс", переводится "случай"). Предлог OF читается "эв". Весь оператор CASE нужно понимать так:

В СЛУЧАЕ ЕСЛИ отметка РАВНА

1 или 2 печатай 'Кошмар!'

3 печатай 'Неважно'

4 печатай 'Неплохо'

5 печатай 'Молодец!'

ИНАЧЕ печатай 'Таких отметок не бывает'

КОНЕЦ оператора case

В процессе исполнения оператора case компьютер сравнивает значение переменной Otmetka по очереди со всеми значениями, перечисленными перед двоеточиями. Наткнувшись на совпадающее значение, он выполняет оператор, стоящий после двоеточия. На этом исполнение оператора case завершается. Если же совпадающего значения так и не нашлось, то выполняется оператор, стоящий после слова else (в нашей программе он полезен на тот случай, если ученик болен манией величия и вводит число 6). После else может стоять и цепочка операторов, записанных через точку с запятой.

Если вы еще недостаточно хорошо поняли логику оператора case, то обратите внимание на то, что в нашей программе он работает так же, как следующий оператор if:

if (Otmetka=1) OR (Otmetka=2)
then WriteLn('Кошмар!')
else if Otmetka=3
then WriteLn('Неважно')
else if Otmetka=4
then WriteLn('Неплохо')
else if Otmetka=5
then WriteLn('Молодец!')
else WriteLn('Таких отметок не бывает')

У оператора case есть существенное ограничение - переменная, стоящая после слова case, должна быть так называемого порядкового типа. Подробно о порядковых типах мы поговорим в Глава 12, пока же мы знаем три типа, относящиеся к порядковым - это Integer, LongInt и Char. Порядковыми они называются потому, что все их возможные значения можно выстроить по порядку и перечислить с начала до конца: -32768,....4,5,6,7,8... 32767 для Integer,.....'д','е','ж','з','и'.... для Char. Получается, что значения типов Real и String применять в операторе case нельзя, так как совершенно непонятно, как их перечислять по порядку.

Таким образом, задачу про ПОПАЛ-НЕ ПОПАЛ в принципе невозможно решить при помощи case. И этому две причины: 1)переменная имеет тип Real, 2)перед двоеточием в операторе case нельзя писать условия со знаками >, < и т.п.

Вот еще пример программы с оператором case:

VAR a,k: Integer;

a:=3;

case a*a+1 of {В СЛУЧАЕ ЕСЛИ a*a+1 РАВНО...}

8,3,20:k:=0;

7,10: begin k:=1; WriteLn(k) end;

12..18:k:=3

end {Конец оператора CASE}

Эта программа напечатает 1. Здесь мы видим несколько новых для нас элементов:

Во-первых, после слова case стоит не переменная, а выражение, поэтому с перечисленными перед двоеточиями значениями будет сравниваться число 10, полученное как 3*3+1. Кстати, выражение тоже обязано быть порядкового типа (о том, что такое тип выражения, мы строго поговорим в 14.4, а сейчас скажем только, что это выражение, имеющее значения порядкового типа).

Во-вторых, один из операторов, стоящих после двоеточий, составной. Это begin k:=1; WriteLn(k) end

В-третьих - конструкция 12..18. Она обозначает то же, что и 12,13,14,15,16,17,18. Она служит в нашем случае для сокращения записи и называется диапазоном.

В-четвертых, здесь отсутствует конструкция else. Это значит, что если бы в нашей программе мы вместо a:=3 написали a:=0, то оператор case, не найдя совпадения, не выбрал бы ни один из трех своих вариантов и, не найдя также else, завершил бы свою работу, так ничего и не сделав.

Задание 28:

Ученик вводит с клавиатуры букву русского алфавита. Компьютер должен сказать, какая это буква - гласная, согласная звонкая, согласная глухая или другая какая-нибудь (можно и НЕ ЗНАЮ).

Задание 29: «Калькулятор». Ученик вводит с клавиатуры число, символ арифметического действия (+, -, *, /) и еще одно число. Компьютер должен напечатать результат. Указание: Используйте три оператора ReadLn.

Глава 6. Циклические программы

Цикл – главное средство заставить компьютер много раз сделать одно и то же или похожее. Первое представление о цикле я дал в 2.8. Посмотрим, как осуществить цикл на Паскале. Предположим, мы хотим, чтобы компьютер бесконечно повторял выполнение следующего фрагмента:

Write ('Это ');
Write ('тело ');
Write ('цикла');
Write (' ')

в результате чего на мониторе мы бы увидели:

Это тело цикла Это тело цикла Это тело цикла Это тело цикла....

Большинство языков программирования (в том числе и Паскаль) устроены так, что операторы выполняются в том порядке, в котором они записаны. Это значит, что после оператора Write ('Это ') обязательно выполнится оператор Write ('тело '), а после него - Write ('цикла'), а после него - Write (' '). Все это хорошо. Но нам нужно, чтобы после выполнения оператора Write (' ') Паскаль нарушал этот свой принцип последовательного выполнения операторов и выполнял бы оператор Write ('Это '). Если мы этого добьемся, то дальше все пойдет само собой, так как после Write ('Это ') Паскаль автоматически выполнит Write ('тело ') и так далее до бесконечности.

Если бы операторы Паскаля можно было писать по-русски, то для достижения нашей цели было бы естественно воспользоваться такой конструкцией:

метка m1: Write ('Это ');
Write ('тело ');
Write ('цикла');
Write (' ');
иди к оператору, помеченному меткой m1

Здесь мы видим новый для нас "оператор" ИДИ, который выполняется после Write (' ') и единственная работа которого заключается в том, чтобы заставить компьютер перескочить к выполнению оператора Write ('Это '), помеченного меткой m1.

А вот как этот фрагмент выглядит реально на Паскале:

m1: Write ('Это ');
Write ('тело ');
Write ('цикла');
Write (' ');
GOTO m1

Здесь GOTO- оператор перехода, читается " 'гоуту", переводится "иди к", m1 - метка.

Метка - это произвольное имя или произвольное не слишком большое целое положительное число. Оператор GOTO можно писать в любых местах программы и метку можно ставить перед любым оператором,заставляя компьютер таким образом перескакивать в программе откуда угодно куда угодно (правда, в сложных программах и внутри сложных операторов эта свобода перескакивания существенно ограничивается. Метка должна отделяться от оператора двоеточием.

Мы пока знаем, что переменная, встречающаяся в программе, должна быть описана выше BEGIN после слова VAR. Метки, встречающиеся в программе, тоже должны быть описаны выше BEGIN после слова LABEL (читается "лэйбл", переводится "метка").

Вот наша программа полностью:

LABEL m1;
BEGIN
m1: Write ('Это ');
Write ('тело ');
Write ('цикла');
Write (' ');
goto m1
END.

Если вы уже запустили эту программу, то через некоторое время перед вами должен встать жизненно важный вопрос – как же ее остановить? Для этого достаточно прочесть параграф «Выполнение программы» из части IV. Вот вкратце, что вам нужно оттуда знать:

Для прерывания работы программы (в том числе и зациклившейся) существует комбинация клавиш Ctrl-Break (имеется в виду, что, удерживая нажатой клавишу Ctrl, вы должны щелкнуть по клавише Break ). На экран возвращается окно редактора. Строка программы, на которой она была прервана, выделяется полосой белого цвета. Если вы снова запустите программу, она продолжит работу с прерванного места. Чтобы начать сначала, уберите полосу с экрана клавишами Ctrl-F2.

Группа операторов, выполняющихся многократно, называется телом цикла. У нас это все операторы, начиная с Write ('Это ') и кончая GOTO m1.

Пример программы:

LABEL 8;
VAR a,k: Integer;
BEGIN
k:=6;

a:=100;

goto 8;

a:=a+k;

k:=2*k;

WriteLn(a);

8: a:=a+1;

k:=k+10;

WriteLn(k,' ',a);




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 461; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.017 сек.