Материал: Мансуров. Основы программирования в среде Lazarus. 2010

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

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);

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

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

Смотрите также:

11 Горм +
113
14
1433
1511
1632
199
204
2N4264RE
3773