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