Преобразовать строку в число. Пример использования процедуры Val() в Паскаль
Primary tabs
Для преобразований строк в числа в Паскале используется стандартная процедура процедура $val()$ со следующей сигнатурой:
procedure Val(S: String; Var V; var Code : Integer);
где:
- $S$ - переменная со строковым типом (string). Должна представлять последовательность символов, формирующих знаковое целое число - это та строка, которую мы будем преобразовывать.
- $V$ - переменная типа Real или Integer (здесь имеет место перегрузка процедуры). В этой переменной будет содержаться число, если преобразование пройдёт успешно
- $Code$ - переменная типа Integer — позиция, в которой произошла ошибка при преобразовании, или нуль, если ошибки не было.
При этом следует отметить, что переменные $V$ и $Code$ принимаются переменной по ссылке -- то есть хотя процедура и не возвращает значений, но она изменит значения этих двух переменных в области вызова и таким образом можно будет получить результат преобразования.
Что делает процедура val()
- Процедура $val()$ делает попытку преобразовать строковое значение $S$ в его числовое представление $V$.
- Переменная $Code$ будет содержать номер позиции, в которой произошла ошибка при преобразовании, или нуль, если ошибки не было.
- Для успешного преобразования, необходимо, чтобы значение $S$ было корректной записью числа, рассмотрим примеры вызовов для разных значений и их типов:
var intChislo, Code : Integer; rChislo: real; s: string; begin s := '123'; Val(s, intChislo, Code); writeln(intChislo, ' | Error code: ', Code); // Получим: 123 | Error code: 0 -- все хорошо s := '1q23'; Val(s, intChislo, Code); writeln(intChislo, ' | Error code: ', Code); { Получим: 0 | Error code: 2 -- т.к. в позиции 2 стоит некорректный для числа символ q} s := '17.5'; Val(s, intChislo, Code); writeln(intChislo, ' | Error code: ', Code); { Получим: 0 | Error code: 2 -- т.к. в позиции 3 стоит точка, а этот символ не участвует в записи типа integer, т.е. '17.5' некорректный литерал для преобразования в integer} s := '17.5'; Val(s, rChislo, Code); writeln(rChislo, ' | Error code: ', Code); { Получим: 1.7500000000000000E+001 | Error code: 0 -- прошло успешно, т.к. '17.5' корректный литерал для преобразования в real} readln(); // удерживаем консоль end.
Пример использования $val()$ с обработкой кода ошибки
var
I, Code : Integer;
s: string;
begin
writeln('vvedite chislo:');
readln(s); { <-- получаем строковое представление числа
(предположительно, строку цифр
-- ведь на самом деле мы не знаем что введёт пользователь }
// далее попытаемся преобразовать полученную строку в число
Val(s, I, Code); // вызываем процедуру преобразования
{ Была ошибка при преобразовании ? }
if (Code <> 0) then
writeln('Oshibka pri preobrazovanii v pozicii : ', Code)
else
writeln('Uspeshno poluchili chislo = ', I);
readln(); // удерживаем консоль
end.
Источники:
- Val (процедура): http://pascal.net.ru/Val
- Log in to post comments
- 56313 reads
vedro-compota
Sat, 05/09/2020 - 10:38
Permalink
примерный код функции-обертки с возратом значения
function myIntVal(S: string): integer var V, Code: integer; begin Val(S; Var V; var Code : Integer); if(code = 0) then writeln(number) else begin writeln('Error: [' . S . '] ne chislo! '); Exit; end; result := V; end_____________
матфак вгу и остальная классика =)