Глиф Учебники

Как перевести число в строку и обратно

Справочник · Pascal · 1 минута чтения

Процедуры str и val есть и в PascalABC.NET, и в Free Pascal, без подключения модулей:

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 — не число

Проверяйте код после каждого val — иначе программа продолжит работу с мусором вместо числа.

Free Pascal записывает в код номер первого неправильного символа (для '12a' — 3), а PascalABC.NET — просто 1. Поэтому сравнивайте код с нулём, а не с конкретным числом.

IntToStr и StrToInt

Функции короче процедур — их можно писать прямо в выражении:

Pascal
s := 'Ответ: ' + IntToStr(n);
n := StrToInt('45') * 2;

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.

Pascal
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

Программа складывает только цифры и пропускает остальные символы.

Проверка ввода

Чтобы программа не падала, когда вместо числа ввели буквы, читайте строку и проверяйте её:

Pascal
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