Раздел: Стандартные функции Паскаля

Процедура Val

Основы программирования 2.0 Основы программирования
Каждый профессионал когда-то был чайником. Наверняка вам знакомо состояние, когда “не знаешь как начать думать, чтобы до такого додуматься”. Наверняка вы сталкивались с ситуацией, когда вы просто не знаете, с чего начать. Эта книга ориентирована как раз на таких людей, кто хотел бы стать программистом, но совершенно не знает, как начать этот путь. Подробнее...

Процедура Val в Паскале вычисляет числовое (перечисляемое) значение из строкового типа. Синтаксис:

procedure Val(const S  : string;
              var V;
              var Code : Word);

Процедура Val в Delphi, Lazarus и Паскале преобразует значение, представленное в строке S в числовое значение или перечисляемое значение, и сохраняет это значение в переменной V, которая может быть типа Longint, Real или Byte, или любого перечисляемого типа.

Если преобразование не удалось, то параметр Code содержит индекс символа в строке S, который помешал преобразованию (вызвал ошибку).

Строка может содержать пробелы в начале.

Строка может содержать число в десятичном, шестнадцатеричном, двоичном или восьмеричном формате.

Для перечисляемых значений строка должна быть именем перечисляемого значения. Имя распознаётся без учета регистра.

Для шестнадцатеричных значений также можно использовать префикс 0x или x (без учета регистра).

Преобразование в перечисление поддерживается только с версии компилятора FreePascal 2.3.1 (или более поздней).

Если преобразование не удалось, значение параметра Code указывает позицию, в которой преобразование пошло не так. Значение V в этом случае не определено.

В любом языке программирования имеется множество функций для преобразования типов. И в Паскале их тоже очень много. Но процедуру Val во многих случаях использовать удобнее, потому что:

  • Не надо подключать дополнительные модули.
  • Ошибка преобразования не приводит к аварийному завершению программы.
  • Процедура может работать с разными представлениями чисел.

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

program valproc;

type TSeasons = (Winter, Spring, Summer, Autumn);   

var iVar    : LongInt;
    fVar    : Real;
    Err     : WORD;
    Seasons : TSeasons; 

//****************************************************************
// ОСНОВНАЯ ПРОГРАММА
//****************************************************************
begin
  //Преобразуем целое десятичное число
  Val('100', iVar, Err);
  WriteLn(iVar, ' = 100 dec');

  //Преобразуем целое шестнадцатеричное число
  Val('0x64', iVar, Err);
  WriteLn(iVar, ' = 0x64 hex');
  //Преобразуем целое шестнадцатеричное число
  Val('$64', iVar, Err);
  WriteLn(iVar, ' = $64 hex');

  //Преобразуем целое восмеричное число
  Val('&144', iVar, Err);
  WriteLn(iVar, ' = &144 oct');

  //Преобразуем целое двоичное число
  Val('%01100100', iVar, Err);
  WriteLn(iVar, ' = %01100100 bin');

  //Преобразуем вещественное число
  Val('3.14', fVar, Err);
  WriteLn(fVar:0:4);

  //Преобразуем перечисление
  Val('Summer', Seasons, Err);
  WriteLn(Seasons); 

  //Пытаемся преобразовать неправильное вещественное число
  //В переменной Err будет число 2, т.к. в строковых
  //представлениях вещественных чисел должна быть точка,
  //а не запятая
  Val('3,14', fVar, Err);
  if Err = 0 then WriteLn(fVar:0:4)
  else WriteLn('Error at character index ', Err);

  WriteLn('Then end. Press ENTER...');
  ReadLn;
end.

Пояснять тут особо нечего - всё рассказано в комментариях. Для лучшего понимания работы программы см. рисунок:

Как преобразовать строку в число в Lazarus


Как стать программистом 2.0 Как стать программистом 2.0

Эта книга для тех, кто хочет стать программистом. На самом деле хочет, а не просто мечтает. И хочет именно стать программистом с большой буквы, а не просто научиться кулебякать какие-то примитивные программки… Подробнее...
Помощь в технических вопросах Помощь в технических вопросах

Помощь студентам. Курсовые, дипломы, чертежи (КОМПАС), задачи по программированию: Pascal/Delphi/Lazarus; С/С++; Ассемблер; языки программирования ПЛК; JavaScript; VBScript; Fortran; Python и др. Разработка (доработка) ПО ПЛК (предпочтение - ОВЕН, CoDeSys 2 и 3), а также программирование панелей оператора, программируемых реле и других приборов систем автоматизации. Подробнее...

Инфо-МАСТЕР ®
Все права защищены ©
e-mail: mail@info-master.su

Яндекс.Метрика