Как перевести число в строку и обратно
Процедуры str и val есть и в PascalABC.NET, и в Free Pascal, без подключения модулей:
program Convert;
var
n, code: integer;
s: string;
begin
n := 2026;
str(n, s);
s := 'Год ' + s;
writeln(s);
val('123', n, code);
writeln(n + 1);
val('12a', n, code);
if code <> 0 then
writeln('12a — не число');
end.Год 2026
124
12a — не числоstr(число, строка)записывает число в строковую переменную.val(строка, число, код)переводит строку в число. Если всё прошло хорошо,кодравен 0. Если в строке не число,кодне ноль, а значение переменной-числа полагаться нельзя.
Проверяйте код после каждого val — иначе программа продолжит работу с мусором вместо числа.
Free Pascal записывает в код номер первого неправильного символа (для '12a' — 3), а PascalABC.NET — просто 1. Поэтому сравнивайте код с нулём, а не с конкретным числом.
IntToStr и StrToInt
Функции короче процедур — их можно писать прямо в выражении:
s := 'Ответ: ' + IntToStr(n);
n := StrToInt('45') * 2;- PascalABC.NET:
IntToStr,StrToInt,FloatToStr,StrToFloatработают без подключения модулей. - Free Pascal: нужна строка
uses sysutils;сразу послеprogram …;.
StrToInt от строки, в которой не число, останавливает программу с ошибкой. Если строка пришла от человека, надёжнее val с проверкой кода.
Дробные числа
val переводит и дробные числа, если переменная типа real: val('2.5', x, code). Дробная часть — через точку.
Дробное число в строку с двумя знаками после точки: в Free Pascal формат указывают прямо в str — str(x:0:2, s), в PascalABC.NET удобнее функция Format('{0:f2}', x). У FloatToStr количество знаков не задаётся.
Цифра-символ в число и обратно
Один символ-цифру переводят через код: ord(c) - ord('0'). Для '7' это 55 − 48 = 7. Обратно: chr(ord('0') + d) при d от 0 до 9.
program DigitSumString;
var
s: string;
i, sum: integer;
begin
readln(s);
sum := 0;
for i := 1 to length(s) do
if (s[i] >= '0') and (s[i] <= '9') then
sum := sum + ord(s[i]) - ord('0');
writeln('Сумма цифр: ', sum);
end.A1B2C3Сумма цифр: 6Программа складывает только цифры и пропускает остальные символы.
Проверка ввода
Чтобы программа не падала, когда вместо числа ввели буквы, читайте строку и проверяйте её:
program SafeInput;
var
s: string;
n, code: integer;
begin
repeat
writeln('Введите целое число:');
readln(s);
val(s, n, code);
until code = 0;
writeln('Квадрат: ', n * n);
end.десять
10Введите целое число:
Введите целое число:
Квадрат: 100