Преобразовать строку в число. Пример использования процедуры 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
- 55316 reads
vedro-compota
Sat, 05/09/2020 - 10:38
Permalink
примерный код функции-обертки с возратом значения
_____________
матфак вгу и остальная классика =)