Jump to content

постоянная Холлерита

Константы Холлерита , названные в честь Германа Холлерита , использовались в ранних программах FORTRAN для обеспечения возможности манипулирования символьными данными.

В раннем Фортране не было CHARACTER тип данных , только числовые типы. Чтобы выполнять манипуляции с символами, символы необходимо было поместить в числовые переменные с использованием констант Холлерита. Например, константа 3HABC указана трехсимвольная строка «ABC», идентифицируемая начальным целым числом, представляющим длину строки 3 и указанный персонаж Холлерита H, за которым следуют строковые данные ABC. Эти константы были бестиповыми , поэтому не возникало проблем с преобразованием типов . Если константа задавала меньше символов, чем можно было хранить в элементе данных, символы затем сохранялись в элементе с выравниванием по левому краю и заполнением пустыми буквами .

Механика

[ редактировать ]

Стандартом FORTRAN 66 синтаксис Холлерита разрешен в следующих случаях:

  • В качестве констант в DATA заявления
  • Как постоянные фактические аргументы в подпрограмме CALL заявления
  • Как редактировать дескрипторы в FORMAT заявления

Переносимость была проблематичной с константами Холлерита. Во-первых, размеры слов различались в разных компьютерных системах, поэтому количество символов, которые можно было поместить в каждый элемент данных, также различалось. Реализации варьировались от двух до десяти символов в слове. Во-вторых, было сложно манипулировать отдельными символами внутри слова портативным способом. Это привело к значительному изменению и маскировке кода с использованием нестандартных функций, специфичных для конкретного поставщика. Тот факт, что наборы символов различались на разных машинах, также усложнял проблему.

Некоторые авторы придерживались мнения, что для лучшей переносимости следует использовать только один символ для каждого элемента данных. Однако, учитывая небольшой объем памяти машин того времени, этот метод считался чрезвычайно расточительным.

Технологическое устаревание

[ редактировать ]

Одной из основных особенностей FORTRAN 77 было CHARACTER строковый тип данных. Использование этого типа данных значительно упростило манипулирование символами в программах на Фортране, сделав почти все использование метода констант Холлерита устаревшим.

Константы Холлерита были удалены из стандарта FORTRAN 77, но все еще описаны в приложении для тех, кто желает продолжить поддержку. Дескрипторы редактирования Холлерита были разрешены в Fortran 90 и были удалены из стандарта Fortran 95.

Ниже приведена программа «Привет, мир» на языке FORTRAN 66 , использующая константы Холлерита. Предполагается, что реализация поддерживает не менее четырех символов в слове:

      PROGRAM HELLO1
C
      INTEGER IHWSTR(3)
      DATA IHWSTR/4HHELL,4HO WO,3HRLD/
C
      WRITE (6,100) IHWSTR
      STOP
  100 FORMAT (3A4)
      END

Кроме DATA операторов, константы Холлерита также допускались в качестве фактических аргументов при вызовах подпрограмм. Однако вызываемый абонент не мог узнать, сколько символов было передано. Программисту приходилось передавать информацию явно. Программу hello world можно было бы написать следующим образом – на машине, где в слове хранятся четыре символа:

      PROGRAM HELLO2
      CALL WRTOUT (11HHELLO WORLD, 11)
      STOP
      END
C
      SUBROUTINE WRTOUT (IARRAY, NCHRS)
C
      INTEGER IARRAY(1)[notes 1]
      INTEGER NCHRS
C
      INTEGER ICPW
      DATA ICPW/4/[notes 2]
      INTEGER I, NWRDS
C
      NWRDS = (NCHRS + ICPW - 1) /ICPW
      WRITE (6,100) (IARRAY(I), I=1,NWRDS)
      RETURN
  100 FORMAT (100A4)[notes 3]
      END

Хотя технически это не константа Холлерита, тот же синтаксис Холлерита был разрешен в качестве дескриптора редактирования в FORMAT заявления. Программу hello world можно также записать так:

      PROGRAM HELLO3
      WRITE (6,100)
      STOP
  100 FORMAT (11HHELLO WORLD)
      END

Одной из наиболее удивительных особенностей было поведение дескрипторов редактирования Холлерита при использовании их для ввода. Следующая программа изменится во время выполнения HELLO WORLD к каким бы то ни было следующим одиннадцати символам во входном потоке и распечатайте этот ввод:

      PROGRAM WHAT1
      READ (5,100)
      WRITE (6,100)
      STOP
  100 FORMAT (11HHELLO WORLD)
      END

Примечания

[ редактировать ]
  1. ^ В FORTRAN 66 не было возможности указать массив переменного размера. Поэтому цифра «1» обычно использовалась для обозначения того, что размер неизвестен.
  2. ^ Четыре символа в слове.
  3. ^ Число 100 — это «достаточно большое» значение, позволяющее записать любое разумное количество символов. Также обратите внимание, что здесь также жестко запрограммировано четыре символа в слове.
  • Американский стандарт FORTRAN . Американская ассоциация стандартов, X3.9-1966. п. 38.

4.2.6 Тип Холлерита . Данные Холлерита представляют собой строку символов. Эта строка может состоять из любых символов, допускающих представление в процессоре. Пустой символ является допустимым и значимым символом в данных Холлерита.

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: e1dec8ac768140f1d03d34729311428a__1708151460
URL1:https://arc.ask3.ru/arc/aa/e1/8a/e1dec8ac768140f1d03d34729311428a.html
Заголовок, (Title) документа по адресу, URL1:
Hollerith constant - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)