Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
osnovy_programmirovanija_v_srede_lazarus.pdf
Скачиваний:
116
Добавлен:
18.03.2015
Размер:
6.53 Mб
Скачать

2.1 Основные элементы языка

____________________________________________________________________

end.

Как мы видим, при использовании оператора for запись цикла становится короче. Поэтому, если заранее точно известно число повторений цикла или его можно вычислить перед выполнением цикла, то предпочтительней использо-

вать цикл for.

2.1.24 Оператор выбора case

Для программирования разветвлений в алгоритме чаще всего используется условный оператор if…then или if…then…else. Однако если путей выбора много, то запись алгоритма с помощью условного оператора становится гро-

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

case <выражение> of

значение 1: оператор 1;

значение 2: оператор 2;

………………………………………

значение n: оператор n;

else

оператор;

end;

В этой конструкции операторы могут быть составными, <выражение>

должно быть порядкового типа, т.е. integer, char, boolean, перечислимого или интервального типа. Более подробно о типах данных мы поговорим в 3.2.

Тип <значение> должен совпадать с типом <выражение>, может быть одно или несколько, разделенных запятыми, а также может представлять собой не-

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

Ветвь else вместе с оператором может отсутствовать.

124

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

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

1.вычисляется значение <выражения>.

2.выполняется оператор, метка которого <значение> совпадает со значе-

нием <выражение>.

3. Если ни одно<значение> не совпадает со значением <выражение>, вы-

полняется оператор после else.

Рассмотрим применение оператора выбора case на примере создания меню в консольных приложениях.

Пример.

program case_menu;

 

{$mode objfpc}{$H+}

 

uses

 

CRT, FileUtil;

 

var

 

choose: integer;

 

begin

 

{Формирование меню}

 

writeln(UTF8ToConsole('Выберите нужный режим работы

:'));

writeln(UTF8ToConsole('Создание файла

1'));

writeln(UTF8ToConsole('Вывод содержимого файла

2'));

writeln(UTF8ToConsole('Поиск записей по заданным полям

3'));

writeln(UTF8ToConsole('Добавление записей в файл

4'));

writeln(UTF8ToConsole('Удаление записей из файла

5'));

writeln(UTF8ToConsole('Корректировка записей в файле

6'));

writeln(UTF8ToConsole('Выход из программы

7'));

repeat

 

125

2.1 Основные элементы языка

____________________________________________________________________

readln(choose);

case choose of

{choose - значение для выбора режима работы}

1:writeln(UTF8ToConsole('Вы выбрали пункт меню 1'));

2:writeln(UTF8ToConsole('Вы выбрали пункт меню 2'));

3:writeln(UTF8ToConsole('Вы выбрали пункт меню 3'));

4:writeln(UTF8ToConsole('Вы выбрали пункт меню 4'));

5:writeln(UTF8ToConsole('Вы выбрали пункт меню 5'));

6:writeln(UTF8ToConsole('Вы выбрали пункт меню 6'));

7:writeln(UTF8ToConsole('Вы выбрали пункт меню 7' ));

else

writeln(UTF8ToConsole('Такого режима нет')); end; { end of case }

until choose = 7;

writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

2.1.25 Организация простейшего контроля ввода данных.

Вернемся, теперь, к примеру, разобранному в разделе 2.1.14. "Операции с целыми числами", где мы обсуждали вопрос о контроле за вводимыми пользо-

вателем данных. Сейчас у нас уже достаточно знаний, чтобы организовать про-

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

но ввести необходимые данные. Программа в этом случае будет иметь вид:

program int_operations_control;

{$mode objfpc}{$H+}

126

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

uses Crt, FileUtil;

var

A, B, C: integer;

zero: boolean;

begin

zero:= true;

writeln(UTF8ToConsole('Введите два числа'));

readln(A);

repeat

readln(B);

{Проверка введенного числа B на ноль}

if B = 0 then begin

writeln(UTF8ToConsole('Второе число не может равняться 0')); writeln(UTF8ToConsole('Введите другое число не равное 0'));

end else

zero:= false; until not zero;

writeln('A= ',A,' B= ',B); C:= A + B;

writeln(UTF8ToConsole('Демонстрация сложения, C= '),C);

C:= A * B;

writeln(UTF8ToConsole('Демонстрация умножения, C= '),C);

C:= A div B;

writeln(UTF8ToConsole('Демонстрация деления нацело, C= '),C);

C:= A mod B;

writeln(UTF8ToConsole('Остаток от деления, C= '),C);

C:= A - B;

127

2.1 Основные элементы языка

____________________________________________________________________

writeln(UTF8ToConsole('Демонстрация вычитания, C= '),C); writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Иногда при выполнении цикла бывает необходимо принудительно завер-

шить цикл, даже если условие выхода из цикла не приняло нужного значения

(для циклов while…do и repeat…until) или параметр цикла не достиг нужной величины (для цикла for). Для этого используют инструкцию

break;

Также достаточно часто встречаются ситуации, когда необходимо начать цикл с начала, даже если не все операторы тела цикла выполнены. В этом слу-

чае используют оператор

continue;

Усовершенствуем нашу программу. Дело в том, что пользователь может в качестве второго числа ввести не только число 0, а вообще ввести недопусти-

мые символы. Например, знаки + и - для целых чисел допустимы, а остальные символы, в том числе и точка, недопустимы. То же самое относится и для пер-

вого вводимого числа.

Для организации контроля за вводом воспользуемся специальной функци-

ей IOResult. Для этого нужно директивой компилятора отключить стандарт-

ный контроль ввода/вывода. Эта директива имеет вид {$I-}. Для восстанов-

ления стандартного режима контроля ввода/вывода необходимо использовать директиву {$I+}.

128

Глава 2 Введение в язык программирования Pascal

____________________________________________________________________

Функция IOResult возвращает 0, если операция ввода/вывода заверши-

лась успешно. Программа теперь будет иметь вид:

program int_operations; {$mode objfpc}{$H+}

{$i-} // отключение стандартного режима контроля ввода uses

CRT, FileUtil; var

A, B, C: integer;

error: boolean; {булевая переменная для контроля ошибок ввода} begin

error:= false; {ошибок при вводе первого числа нет} writeln(UTF8ToConsole('Введите два числа'));

{Проверка на ошибочный ввод числа А}

repeat

readln(A);

error:= (IOResult <> 0);

if error then { если error= true, значит произошла ошибка при вво-

де}

writeln(UTF8ToConsole('Ошибка! Введите целое число'));

until not error;

error:= false; {ошибок при вводе второго числа нет } {Проверка на ошибочный ввод числа B}

repeat

readln(B);

error:= (IOResult <> 0);

if error then

begin

129

2.1 Основные элементы языка

____________________________________________________________________

writeln(UTF8ToConsole('Ошибка! Введите целое число')); continue; { при выполнении этого оператора последующая проверка числа на ноль произведена не будет, выполнение цикла начнется с начала, т.е. с оператора readln(B) }

end;

if B = 0 then

begin

writeln(UTF8ToConsole('Второе число не может равняться 0')); writeln(UTF8ToConsole('Введите другое число не равное 0'));

end

until (B <> 0) and (not error);

{$+} { восстановление стандартного режима контроля ввода/вывода }

writeln('A= ',A,' B= ', B);

C:= A + B;

writeln(UTF8ToConsole('Демонстрация сложения, C= '), C);

C:= A * B;

writeln(UTF8ToConsole('Демонстрация умножения, C= '), C);

C:= A div B;

writeln(UTF8ToConsole('Демонстрация деления нацело, C= '), C);

C:= A mod B;

writeln(UTF8ToConsole('Остаток от деления, C= '), C);

C:= A - B;

writeln(UTF8ToConsole('Демонстрация вычитания, C= '),C); writeln(UTF8ToConsole('Нажмите любую клавишу'));

readkey;

end.

Разумеется, рассмотренный метод контроля ввода/вывода не является единственным. Существуют более надежные и общие методы контроля, о кото-

130

Тут вы можете оставить комментарий к выбранному абзацу или сообщить об ошибке.

Оставленные комментарии видны всем.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]