Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Процедура Val



Procedure Val(S; var V; var Code: Integer);

Преобразовывает символьное представление числа S в целое или вещественное число V. Code – код ошибки, возникающей при переводе строки в число. Если все хорошо, то Code=0.

Пример использования:

“Безопасный” ввод данных.

При вводе информации с клавиатуры или из файла при помощи процедур read/readln возможно возникновение ошибки времени выполнения программы (runtime error) в результате которой выполнение программы прерывается. Ошибка возникает в том случае, когда обнаруживается несоответствие между типом переменной, указанной в read/readln, и той строкой, которую этот read/readln получил для обработки.

Например, если x – переменная целого типа, в программе она читается таким образом: read(x), а пользователь вводит строку “два”, то программа завершит свою работу, выведя сообщение “Invalid numeric format” - “неподходящий формат числа”.

Это происходит потому, что контроль ошибок выполняет сам Turbo Pascal. В простых задачах это удобно, но в более или менее серьезных задачах такое решение недопустимо. В реальных задачах все ошибки пользователя должны обрабатываться самой программой. Средства, обеспечивающие контроль правильности ввода, называются “защитой от дурака”. Существует несколько способов реализации этой защиты. Один из них состоит в следующем: весь ввод пользователя ВСЕГДА читается в виде строк (или кодов отдельных клавиш). Затем введенные строки анализируются. Если введена правильная строка, то программа идет дальше, если нет, то выдается сообщение об ошибке, и данные требуют ввести повторно.

{Процедура "безопасного" ввода целого числа X

Msg - выводимая строка-подсказка

[ minVal.. maxVal ] - допустимый интервал значения X }

procedure ReadInt(msg: string; var x: integer;

minVal, maxVal: integer);

var

s: string; {Вводимая строка}

errCode: integer; {Код ошибки}

isError: boolean; {Флаг ошибки}

begin

repeat

write(msg); {Вывод приглашения}

readln(s); {Чтение строки, ВВЕДЕННОЙ ПОЛЬЗОВАТЕЛЕМ}

val(s,x,errCode); {Попытка получить целое число из строки}

{Ошибка есть, если код ошибки не 0, или если код ошибки 0,

но введенное число лежит вне допустимого интервала}

isError:= (ErrCode<>0) or

(ErrCode=0) and ((x<=minVal) or (x>=maxVal));

{Если есть ошибка, то вывести сообщение об ошибке}

if isError then writeln('Error! Please repeat input!');

until not isError; {Если нет ошибки, то выходим из цикла,

а если ошибка есть, то снова вводим число}

end;

{Функция перевода целого числа X в строку

возвращается строка}

function IntToStr(x: integer): string;

var

s: string;

begin

Str(x, s);

IntToStr:= s;

end;

{Демонстрация “безопасного” ввода

на примере ввода одномерного массива}

var

a: array[1..10] of integer; {Массив}

n: integer; {Количество элементов в массиве}

i: integer; {Счетчик}

begin

{Безопасный ввод N}

ReadInt('Введите n=', n, 1, 10);

{Безопасный ввод элементов массива}

for i:=1 to n do

ReadInt('Введите a[' + IntToStr(i) + ']=',a[i],10,99);

{Вывод элементов для контроля}

for i:=1 to n do

write(a[i],' ');

writeln;

end.





Дата публикования: 2014-11-29; Прочитано: 325 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.008 с)...