Порядковые типы

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

Ответ очень близок, во всем виновато неэффективное планирование бизнеса. Чтобы сделать все грамотно, нужно разработать технико-экономическое обоснование.

Что такое технико-экономическое обоснование проекта

Технико-экономическое обоснование, сокращенно ТЭО – это анализ, оценка и расчет экономической целесообразности реализации проекта создания предприятия, реконструкции и модернизации имеющихся объектов, строительства или постройки нового технического объекта. Основано оно на сопоставлении оценки результатов и расходов, определении эффективности применения и периода, за который окупаются инвестиции. Это могут быть сторонние инвестиции.

Также оно нужно для подтверждения целесообразности выбора новой технологии производства, процессов, оборудования. Чаще всего это подходит для уже действующих предприятий.

ТЭО необходимое каждому инвестору. В ходе его разработки проводится последовательность работ по анализу и изучению всех компонентов инвестиционного проекта и подсчет сроков возвращения вложенных средств.

Отличие ТЭО от бизнес-плана

Часто не различают бизнес-план и ТЭО. Главное отличие их структур в том, что во втором почти отсутствует описание компании и продукта, анализа рынка, анализа рисков и маркетинговой стратегии – наиболее важного аспекта в бизнес-плане. О маркетинговой стратегии можете подробней прочесть в статьи «Маркетинговый план». Такая сокращенная структура связана с тем, что пишется оно для проектов введения новых процессов, технологий и оборудования на действующие предприятия. В технико-экономическом обосновании излагается информация о причинах выбора определенных решений, процессов и технологий, экономические расчеты эффективности их внедрения.

Итак, можно сказать, что ТЭО несет специфический характер сравнительно с бизнес-планом, и является более узким.

Для чего нужно ТЭО

Правильно составленное ТЭО позволит увидеть эффективность вложения в разработку новых или доработку прежних видов деятельности компании, нуждается предприятие в слиянии или поглощении, есть ли надобность в кредитовании. Также ТЭО помогает выбрать нужное оборудование, подобрать и внедрить подходящие технологии производства, корректно организовать деятельность компании.

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

Разработка ТЭО

Разработка ТЭО нужна в случаях:

  • когда, руководству компании нужно обоснование выбора нового оснащение;
  • когда руководству компании нужно пояснение решения о модификации технологии производства.

Для разработки ТЭО понадобится целостная работа группы специалистов – юристов, финансистов, экономистов и т. д.

Разрабатывая технико-экономическое обоснование, рассматривайте следящие моменты:

  1. Общая информация о будущей работе. Короткая характеристика области деятельности проекта, его участники и место размещения, анализ спроса и предложения, главные покупатели продукции, главные конкуренты. Прописываются важные параметры: номенклатура и вид продукции, объем компании.
  2. Капитальные затраты. Изображается смета единовременных расходов, нужных для реализации принятых решений.
  3. Ежегодные затраты. Показывается смета эксплуатационных расходов с распределением по статьям.
  4. Производственная программа. Состоит из описания всех видов продуктов, которые полагается предоставлять в пределе данных работ, указывается объем производства и цены реализации. Также здесь обосновываются ценовые показатели.
  5. Финансирование. Данный пункт очень похож на финансовый план бизнес-плана, но имеет и свои отличия. Схема финансирования с указанием источников получения кредитных средств, условий пользования ими и сроки погашения.
  6. Оценка рациональности осуществления предложенного варианта. На основании исходных данных, подходящих для экономической оценки, рассчитываются главные экономические показатели, которые и позволят рассчитать рациональность осуществления проекта.
  7. Расчетная часть. Прописывает важные расчетные материалы – прогноз баланса и схемы передвижения финансовых потоков.

Структура ТЭО

Снова-таки, сравнительно со структурой бизнес-плана, который имеет четко назначенные разделы и пункты, структура ТЭО может колебаться между несколькими вариациями. Варианты могут отличаться по тому, что в каждом из них разбираются разные проблемы.

Если ориентироваться на методику UNIDO, тогда структура ТЭО будет выглядеть примерно так:

  1. Резюме. Краткое описание главных вопросов содержания всех глав.
  2. История и положение проекта.
  3. Анализ рынка и концепция маркетинга.
  4. Материальные ресурсы. Нужные для производства сырье и ресурсы, приблизительные потребности в тех же ресурсах и сырье, ситуация с их поставками. Если денег на реализацию бизнеса нет, займитесь их поиском. О том, где взять средства на открытие и расширение бизнеса, читайте в другой статье.
  5. Местоположение, участок и окружающая среда. Предварительный выбор места расположения, в том числе подсчет стоимости аренды помещения или земельного участка.
  6. Проектно-конструкторские работы. Раннее определение масштабности работ, а также объекты гражданского строительства, технология производства и оборудование, которые нужны для нормальной роботы компании.
  7. Организация и накладные затраты. Примерная организационная структура, сметные накладные расходы. Это что-то похожее на организационный план.
  8. Кадровые ресурсы. Предполагаемые потребности в ресурсах с разбивкой по категориям рабочих.
  9. Календарное осуществление принятых решений. Приблизительный график реализации проекта.
  10. Инвестиции и финансовый анализ

Технико-экономическое обоснование в дальнейшем может послужить основой для разработки бизнес-плана.

Методика составления ТЭО .

При составлении ТЭО допускается следящая последовательность тематических частей:

  • исходные данные, информация о секторе рынка,
  • существующие возможности действующего бизнеса предприятия,
  • источники сырья, материальные факторы длоя развития бизнеса,
  • капитальные затраты предполагаемые для достижения поставленной цели,
  • эксплуатационные затраты при реализации проекта,
  • производственный план,
  • финансовая политика и финансовая составляющая проекта,
  • общая информация о будущем проекте.

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

Расчеты в ТЭО состоят из таблиц, в которых представлено движение денежных средств и баланс.

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

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

Теоретики предлагают представления, что технико-экономическое обоснование – результат разнообразных исследований, как экономической направленности, так и маркетинговых исследований. Но при этом делается вывод о реалистичности проекта, и определяется круг экономических, организационных и других предполагаемых решений для оптимизации производственного процесса. При этом часто технико-экономическое обоснование является составной частью бизнес-плана.

При этом существует мнение, что технико-экономическое обоснование, в какой-то мере, представляет собой либо сокращенный вариант бизнес-плана, либо, напротив, это обычный бизнес-план, который назвали технико-экономическим обоснованием.

Необходимо отметить, что если порядок составления и структуры бизнес-плана четко прописаны, то при составлении ТЭО можно найти несколько различных вариантов написания, которые различаются в зависимости от рассматриваемых проблем.

Существуют следующие варианты технико-экономического обоснования на практике:

Пример №1

1. Реальное состояние предприятия;
2. Анализ рынка и оценка производственных мощностей предприятия;
3. Техническая документация;
4. Положение дел с трудовыми ресурсами;
5. Организационные и накладные расходы предприятия;
6. Оценка длительности проекта;
7. Анализ финансовой привлекательности и экономической обоснованности проекта.

Пример №2

1. Суть предлагаемого проекта, представление основ проекта и принципов его воплощения в жизнь;
2. Небольшой обзор рынка, изложение результатов различных исследований с целью изучения спроса на новую услугу или товар;
3. Технологические и инженерные аспекты проекта:

а) описание процесса производства;
б) доказательства необходимости приобретения нового оборудования или модернизации старого;
в) сравнение нового продукта с действующими стандартами качества;
г) обзор сильных и слабых сторон нового товара или услуги;

4. Финансовые и экономические показатели, включающие в себя:

а) предполагаемые и необходимые инвестиции в проект;
б) предполагаемые внутренние и внешние финансовые источники;
в) производственные издержки;

5. Оценка эффективности и окупаемости продвигаемого проекта, гарантия возврата внешних заимствований;
6. Восприимчивость предлагаемого нового продукта, услуги к существующим на рынках рискам, а также стойкость к возможным рискам в будущем;
7. Общая оценка эффективности возможного внешнего заимствования.

Пример № 3

1. Краткое изложение всех основных положений технико-экономического обоснования;
2. Условия претворения нового проекта в жизнь (кому принадлежит авторство проекта, исходный материал по проекту, какие подготовительные мероприятия и исследования уже проведены и т.п.);
3. Анализ предполагаемых рынков сбыта, обзор производственных возможностей предприятия, а также расчет пиковых возможностей предприятия и ряд других факторов;
4. В данном разделе отражается все, что связано с обеспечением производства (необходимые запасы и производственные ресурсы), анализ существующих контрагентов и возможных поставщиков, анализ возможных издержек на различные производственные факторы;
5. Раздел посвящен территориальному расположению предприятия и расходам, связанным с этим положением (ориентировочная оценка, где будет находиться предприятие, предварительные расчеты, связанные с оплатой аренды участка под производство или под офисное помещение);
6. Конструкторская и проектная документация (оценка необходимых технологий для нового проекта, оценка дополнительных объектов вспомогательного назначения, без которых будет невозможно осуществление производства;
7. Организационные и другие дополнительные расходы, связанные с новым проектом (расчет дополнительных расходов, а также набросок предполагаемой структуры будущего производства);
8. Анализ трудовых ресурсов для будущего проекта (оценка человеческих ресурсов, которые понадобятся для запуска нового проекта). Указывается предполагаемое число рабочего и обслуживающего персонала, необходимое количество инженерно-технических работников. Кроме того, указывается, будут ли привлекаться только местные работники, либо иногородние (иностранные) специалисты. В этом же разделе указываются просчитанные затраты на оплату труда, налоги, связанные с заработной платой и ряд других моментов;
9. График хода осуществления представляемого проекта;
10. Общая оценка экономической и финансовой состоятельности планируемого проекта.

Отметим, что многие из приведенных примеров технико-экономического обоснования, особенно последний пример, напоминает детально составленный бизнес-план. Существует тонкая грань между ТЭО и бизнес-планом, и это приводит к тому, что с большой долей уверенности можно сказать, что если от вас потребуется предоставить технико-экономическое обоснование проекта, можно смело составлять детально проработанный бизнес-план, при этом оставив ненужные споры – теоретикам экономической науки, а лучше перейти к делу.

Примерный состав технико-экономического обоснования (ТЭО)

1. Оглавление или структура. Краткое описание глав документа.
2. Общее описание проекта, вводные данные о проекте. Информация об исследованиях, которые были проведены предварительно, оценка необходимых инвестиций.
3. Описание рынка и производства. Оценка спроса и прогноз будущих продаж, описание мощностей предприятия.
4. Сырье и ресурсы. Расчет необходимых объемов материальных ресурсов, прогноз и описание поставок ресурсов на предприятие, анализ цен на них.
5. Выбор месторасположения предприятия (объектов предприятия). Обоснование выбора места и оценка стоимости аренды помещения или участка.
6. Проектная документация. Описание технологии производства будущих изделий, характеристики необходимого оборудования, дополнительные строения.
7. Организационная структура предприятия. Описание организации предприятия и накладные расходы.
8. Трудовые ресурсы. Оценка потребности в трудовых ресурсах с делением на категории (рабочие, служащие, топ-менеджеры, руководители и т.д). Оценка расходов на заработную плату.
9. Сроки осуществления проекта. План-график проекта, смета расходов, размеры траншей и пр.
10. Экономические расчеты. Оценка инвестиционных издержек, производственные издержки, финансовая оценка проекта.

Отличие ТЭО от Инвестиционного меморандума.

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

До появления инвестиционного меморандума создается технико-экономическое обоснование или ТЭО – это является основой при определении необходимости финансовых вложений. ТЭО это документ, как правило, который создается силами ведущих финансовых менеджеров компаний. Целью технико-экономического обоснования является определение, насколько данное вложение финансов будет перспективным и способно принести финансовую выгоду. Создавая инвестиционный меморандум по сути преследуют то же самое, но инвестиционный меморандум создается для инвесторов.

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

Этап рождения нового предприятия чрезвычайно ответственный для финансовых менеджеров. На этом этапе начинается определение и становление политики предприятия, начинает поступать информация, которая дает реальную информацию о возможных сторонах и скоростей развития.

В чем отличие инвестиционного меморандума от ТЭО .

В ходе оценки настоящего положения предприятия, а также возможных будущих рисков, разрабатывается документ, называющийся – “Инвестиционного меморандума”. Основная цель инвестиционного меморандума состоит в том, чтобы привлечь, при необходимости, в существующий проект внешнее финансирование.

Чаще всего инвестиционный меморандум формируется консалтинговой компанией на основании бизнес-плана и отличается от него тем, что включает в себя информацию инвестиционного характера.

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

При этом основная задача сводится к тому, чтобы просчитать и выявить тот этап развития, когда предприятию будут необходимы финансовые инвестиции, написание инвестиционного меморандума и привлечь стратегические инвестиции в свой проект. И кроме того, менеджеры-финансисты, должны определить и рассчитать сумму необходимых финансовых вливаний в проект. Период, когда финансовые менеджеры предприятия начинают прорабатывать различные сценарии развития, является начальным при составлении инвестиционного меморандума. Определяются различные сценарии развития событий. Пессимистичный сценарий (рассчитываются все возможные последствия недостаточного финансирования и связанные с этим показатели рентабельности и риски для бизнеса). Оптимистичный сценарий развития событий, где необходимо отразить экономические показатели при достаточном финансировании.

В интернете бытует мнение, что технико-экономическое обоснование (ТЭО) это укороченный вариант бизнес-плана, в котором отсутствует (или сильно сжат) раздел маркетинга. Это не так. Технико-экономическое обоснование - это документ, который доказывает, что проект технически возможен и экономически выгоден. На мой взгляд, именно это определение является единственным и законченным. Технико-экономическое обоснование - это документ-идея.

Чтобы совсем было понятно, приведу также и определение бизнес-плана (БП). БП - это документ, который дает подробную информацию о том, кто собирается реализовать проект, каким образом, в какие сроки и на каком рынке. Естественно частью БП обязательно является технико-экономическое обоснование, потому что любой проект начинается с технического и экономического анализа. Бизнес-план - это документ-реализация (см. Как составить бизнес-план).

Основные разделы ТЭО

1. Наименование

2. Цель проекта

3. Основная информация о проекте

4. Экономическое обоснование

4.1. Стоимость реализации проекта

4.2. Расчет прибыли

4.3. Экономические показатели эффективности

5. Дополнительно

6. Приложения

Здесь мы привели приблизительное содержание ТЭО. Естественно, это только основные разделы ТЭО, разделов может быть больше, если для реализации вашего проекта их недостаточно.

Разделы ТЭО - Описание

1. Наименование

Лаконичное (короткое, но проницательное) название проекта. Например: Центр точного машиностроения.

2. Цель проекта

Максимально коротко о том, в чем основная идея проекта. Прочитав это инвестор должен заинтересоваться, но помните если здесь будет много текста, то инвестор не будет этого читать вовсе - он просто скажет вам: "я не нахожу это интересным".

3. Основная информация о проекте

Зависит от конкретного проекта, может включать в себя разделы:

  • Виды деятельности предприятия / Виды продукции.
  • Производственные возможности и объемы.

4.1. Стоимость реализации проекта

Здесь необходимо представить укрупненный перечень работ необходимый для реализации проекта и их стоимость.

4.2. Расчет прибыли

Здесь приводятся расчеты доходов и расходов проектного предприятия при его плановой производственной загруженности, а также расчет прибыли.

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

4.3. Экономические показатели эффективности

Базовые инвестиционные показатели эффективности:

  • Сумма инвестиций
  • Годовая чистая прибыль
  • Дисконтная ставка
  • Период окупаемости
  • Точка безубыточности (за год)

5. Дополнительно

Самая различная информация, которая важна для раскрытия идеи проекта и его экономической эффективности.

6. Приложения

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

Технико-экономическое обоснование должно коротко и недвусмысленно отражать чистую идею проекта. Технико-экономическое обоснование не должно быть нагружено деталями реализации. Этот документ нужен для того, чтобы получить внимание инвестора. Когда инвестор заинтересуется проектом, тогда понадобиться бизнес-план.

К простым типам относятся порядковые, вещественные типы и тип дата-время.

Порядковые типы отличаются тем, что каждый из них имеет конечное количество возможных значений. Эти значения можно определенным образом упорядочить (отсюда - название типов) и, следовательно, с каждым из них можно сопоставить некоторое целое число - порядковый номер значения.

Вещественные типы, строго говоря, тоже имеют конечное число значений, которое определяется форматом внутреннего представления вещественного числа. Однако количество возможных значений вещественных типов настолько велико, что сопоставить с каждым из них целое число (его номер) не представляется возможным.

Тип дата-время предназначен для хранения даты и времени. Фактически для этих целей он использует вещественный формат.

Порядковые типы

К порядковым типам относятся (см. рис. 1.1) целые, логические, символьный, перечисляемый и тип-диапазон. К любому из них применима функция Ord(x), которая возвращает порядковый номер значения выражения X.

Рис. 1.1

Для целых типов функция ord(x) возвращает само значение х, т. е. Ord(X) = х для х, принадлежащего любому целому типу. Применение Ord(x) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 255 (символьный), от 0 до 65535 (перечисляемый). Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ord(х) зависит от свойств этого типа.

К порядковым типам можно также применять функции:

pred(x) - возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ord (х) -1, т. е. оrd(рred(х)) = оrd(х) - 1;

succ (х) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ord (х) +1, т. е. оrd(Succ(х)) = оrd(х) + 1.

Например, если в программе определена переменная

то функция PRED(с) вернет символ "4", а функция SUCC(с) - символ "6".

Если представить себе любой порядковый тип как упорядоченное множество значений, возрастающих слева направо и занимающих на числовой оси некоторый отрезок, то функция pred(x) не определена для левого, a succ (х) - для правого конца этого отрезка.

Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два, четыре или восемь байтов. В табл. 1.1 приводятся названия целых типов, длина их внутреннего представления в байтах и диапазон возможных значений.

Таблица 1.1 - Целые типы

Название

Длина, байт

Диапазон значений

0. .. 2 147 483 647

32 768...+32 767

2 147 483 648...+2 147 483 647

9*1018...+9*1018

0. . .4 294 967 295

Типы LongWord и Int64 впервые введены в версии 4, а типы Smallint и Cardinal отсутствуют в Delphi 1. Тип integer для этой версии занимает 2 байта и имеет диапазон значений от -32768 до +32767, т. е. совпадает с Smallint.

При использовании процедур и функций с целочисленными параметрами следует руководствоваться “вложенностью” типов, т.е. везде, где может использоваться word, допускается использование Byte (но не наоборот), в Longint “входит” Smallint, который, в свою очередь, включает в себя Shortint.

Перечень процедур и функций, применимых к целочисленным типам, приведен в табл. 1.2. Буквами b, s, w, i, l обозначены выражения соответственно типа Byte, Shortint, Word, Integer и Longint,

х - выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

Таблица 1.2 - Стандартные процедуры и функции, применимые к целым типам

Обращение

Тип результата

Действие

Возвращает модуль x

Возвращает символ по его коду

Уменьшает значение vx на i, а при отсутствии i - на 1

Увеличивает значение vx на i, а при отсутствии i -на 1

Возвращает старший бант аргумента

Возвращает третий по счету байт

Возвращает младший байт аргумента

Возвращает True, если аргумент-нечетное число

Как у параметра

Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0...(w-l)

Возвращает квадрат аргумента

Меняет местами байты в слове

При действиях с целыми числами тип результата будет соответствовать типу операндов, а если операнды относятся к различным целым типам - общему типу, который включает в себя оба операнда. Например, при действиях с shortint и word общим будет тип integer. В стандартной настройке компилятор Delphi не вырабатывает код, осуществляющий контроль за возможной проверкой выхода значения из допустимого диапазона, что может привести к недоразумениям.

Логические типы. К логическим относятся типы Boolean, ByteBool, Bool, wordBool и LongBool. В стандартном Паскале определен только тип Boolean, остальные логические типы введены в Object Pascal для совместимости с Windows: типы Boolean и ByteBool занимают по одному байту каждый, Bool и WordBool - по 2 байта, LongBool - 4 байта. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина).

Поскольку логический тип относится к порядковым типам, его можно использовать в операторе цикла счетного типа. В Delphi 32 для Boolean значение

Ord (True) = +1, в то время как для других типов (Bool, WordBool и т.д.)

Ord (True) = -1, поэтому такого рода операторы следует использовать с осторожностью! Например, для версии Delphi 6 исполняемый оператор showMessage (" --- ") в следующем цикле for не будет выполнен ни разу:

for L:= False to True do

ShowMessage ("--);

Если заменить тип параметра цикла L в предыдущем примере на Boolean, цикл будет работать и сообщение дважды появится на экране. [Для Delphi версии 1 и 2 ord (True) =+1 для любого логического типа.]

Символьный тип. Значениями символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0...255. Это число служит кодом внутреннего представления символа, его возвращает функция ord.

Для кодировки в Windows используется код ANSI (назван по имени American National Standard Institute - американского института стандартизации, предложившего этот код). Первая половина символов ПК с кодами 0... 127 соответствует таблице 1.3. Вторая половина символов с кодами 128...255 меняется для различных шрифтов. Стандартные Windows-шрифты Arial Cyr, Courier New Cyr и Times New Roman для представления символов кириллицы (без букв “ё” и “Ё”) используют последние 64 кода (от 192 до 256): “А”... “Я” кодируются значениями 192..223, “а”... “я” - 224...255. Символы “Ё” и “ё” имеют соответственно коды 168 и 184.

Таблица 1.3 - Кодировка символов в соответствии со стандартом ANSI

Символы с кодами 0...31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами.

К типу char применимы операции отношения, а также встроенные функции:

Сhаr (в) - функция типа char; преобразует выражение в типа Byte в символ и возвращает его своим значением;

UpCase(CH) - функция типа char; возвращает прописную букву, если сн - строчная латинская буква, в противном случае возвращает сам символ сн (для кириллицы возвращает исходный символ).

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

colors = (red, white, blue);

Применение перечисляемых типов делает программы нагляднее.

Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе - 1 и т. д. Максимальная мощность перечисляемого типа составляет 65536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа word и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями 0, 1 и т. д.

Использование перечисляемых типов повышает надежность программ благодаря возможности контроля тех значений, которые получают соответствующие переменные. В Object Pascal допускается обратное преобразование: любое выражение типа Word можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощности этого типа. Такое преобразование достигается применением автоматически объявляемой функции с именем перечисляемого типа.

Тип-диапазон. Тип-диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона.

Тип-диапазон задается границами своих значений внутри базового типа:

<мин.знач.>..<макс.знач.>

Здесь <мин. знач. > - минимальное значение типа-диапазона; <макс. знач. > - максимальное его значение.

Тип-диапазон не обязательно описывать в разделе type, а можно указывать непосредственно при объявлении переменной.

При определении типа-диапазона нужно руководствоваться следующими правилами:

два символа “..” рассматриваются как один символ, поэтому между ними недопустимы пробелы; левая граница диапазона не должна превышать его правую границу.

Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью. В частности, если определена переменная.

В стандартную библиотеку Object Pascal включены две функции, поддерживающие работу с типами-диапазонами:

High(х) - возвращает максимальное значение типа-диапазона, к которому принадлежит переменная х;

Low (х) - возвращает минимальное значение типа-диапазона.

Вещественные типы

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

Таблица 1.4 - Вещественные типы

В предыдущих версиях Delphi 1...3 тип Real занимал 6 байт и имел диапазон значений от 2,9*10-39 до 1,7*1038. В версиях 4 и 5 этот тип эквивалентен типу Double. Если требуется (в целях совместимости) использовать 6-байтных Real, нужно указать директиву компилятора {SREALCOMPATIBILITY ON}.

Как видно из табл. 1.4, вещественное число в Object Pascal занимает от 4 до 10 смежных байт и имеет следующую структуру в памяти ПК.

Здесь s - знаковый разряд числа; е - экспоненциальная часть; содержит двоичный порядок; m - мантисса числа.

Мантисса m имеет длину от 23 (для single) до 63 (для Extended) двоичных разрядов, что и обеспечивает точность 7...8 для single и 19...20 для Extended десятичных цифр. Десятичная точка (запятая) подразумевается перед левым (старшим) разрядом мантиссы, но при действиях с числом ее положение сдвигается влево или вправо в соответствии с двоичным порядком числа, хранящимся в экспоненциальной части, поэтому действия над вещественными числами называют арифметикой с плавающей точкой (запятой).

Отметим, что арифметический сопроцессор всегда обрабатывает числа в формате Extended, а три других вещественных типа в этом случае получаются простым усечением результатов до нужных размеров и применяются в основном для экономии памяти.

Особое положение в Object Pascal занимают типы comp и Currency, которые трактуются как вещественные числа с дробными частями фиксированной длины: в comp дробная часть имеет длину 0 разрядов, т. е. просто отсутствует, в currency длина дробной части -4 десятичных разряда. Фактически оба типа определяют большое целое число со знаком, сохраняющее 19...20 значащих десятичных цифр (во внутреннем представлении они занимают 8 смежных байт). В то же время в выражениях comp и currency полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т. д. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.

К порядковым типам относятся (см. рис.4.1) целые, логический, символьный, перечисляемый и тип-диапазон. К любому из них применима функция ORD(X), которая возвращает порядковый номер значения выражения X. Для целых типов функция ORD(X) возвращает само значение X, т.е. ORD(X) = X для X, принадлежащего любому шелому типу. Применение ORD(X) к логическому, символьному и перечисляемому типам дает положительное целое число в диапазоне от 0 до 1 (логический тип), от 0 до 155 (символьный), от 0 до 65535 (перечисляемый). Тип-диапазон сохраняет все свойства базового порядкового типа, поэтому результат применения к нему функции ORD(X) зависит от свойств этого типа.

К порядковым типам можно также применять функции:

PRED (X) - возвращает предыдущее значение порядкового типа (значение, которое соответствует порядковому номеру ORD(X)- 1), т.е.

ORD(PRED(X)) = ORD(X) - 1;

SUCC (X) - возвращает следующее значение порядкового типа, которое соответствует порядковому номеру ORD(X) +1, т.е.

ORD(SUCC(X)) = ORD(X) + 1.

Например, если в программе определена переменная

то функция PRED(C) вернет значение "4", а функция SUCC(C) - значение "6".

Если представить себе любой порядковый тип как упорядоченное множество значий, возрастающих слева направо и занимающих на числовой оси некоторый отрезок, то функция PRED(X) не определена для левого, a SUCC(X) - для правого конца этого отрезка.

Целые типы. Диапазон возможных значений целых типов зависит от их внутреннего представления, которое может занимать один, два или четыре байта. В табл. 4.1 приводится название целых типов, длина их внутреннего представления в байтах и диапазон возможных значений.

Таблица 4.1

При использовании процедур и функций с целочисленными параметрами следует руководствоваться «вложенностью» типов, т.е. везде, где может использоваться WORD, допускается использование BYTE (но не наоборот), в LONGINT «входит» INTEGER, который, в свою очередь, включает в себя SHORTINT.

Перечень процедур и функций, применимых к целочисленным типам, приведен в табл.4.2. Буквами b, s, w, i, l обозначены выражения соответственно типа BYTE, SHORTINT, WORD, INTEGER и LONGINT, x - выражение любого из этих типов; буквы vb, vs, vw, vi, vl, vx обозначают переменные соответствующих типов. В квадратных скобках указывается необязательный параметр.

Таблица 4.2

Стандартные процедуры и функции, применимые к целым типам
Обращение Тип результата Действие
abs (x) x Возвращает модуль х
chr(b) Char Возвращает символ по его коду
dec (vx[, i]) - Уменьшает значение vx на i, а при отсутствии i -на 1
inc(vx[, i]) - Увеличивает значение vx на i, а при отсутствии i - на 1
Hi(i) Byte Возвращает старший байт аргумента
Hi(w) To же То же
Lo(i) " Возвращает младший байт аргумента
Lo (w) " То же
odd(l) Boolean Возвращает True, если аргумент - нечетное число
Random (w) Как у параметра Возвращает псевдослучайное число, равномерно распределенное в диапазоне 0...(w-l)
sgr (x) X Возвращает квадрат аргумента
swap (i) Integer Меняет местами байты в слове
swap (w) Word

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

а:= 32767; {Максимально возможное значение типа INTEGER}

х:= а + 2; {Переполнение при вычислении этого выражения!}

у:= LongInt(а)+2; {Переполнения нет после приведения переменной к более мощному типу}

WriteLn(x:10:0, у:10:0)

В результате прогона программы получим

Логический тип . Значениями логического типа может быть одна из предварительно объявленных констант FALSE (ложь) или TRUE (истина). Для них справедливы правила:

False < True;

succ(False)= True;

pred(True) = False.

Поскольку логический тип относится к порядковым типам, его можно использовать в операторе счетного типа, например:

for 1:= False to True do ....

Символьный тип. Значением символьного типа является множество всех символов ПК. Каждому символу приписывается целое число в диапазоне 0...255. Это число служит кодом внутреннего представления символа, его возвращает функция ORD.

Для кодировки используется код ASCII (American Standard Code for Information Interchange - американский стандартный код для обмена информацией). Это 7-битный код, т.е. с его помощью можно закодировать лишь 128 символов в диапазоне от 0 до 127. В то же время в 8-битном байте, отведенном для хранения символа в Турбо Паскале, можно закодировать в два раза больше символов в диапазоне от 0 до 255. Первая половина символов ПК с кодами 0...127 соответствует стандарту ASCII (табл. 4.3). Вторая половина символов с кодами 128...255 не ограничена жесткими рамками стандарта и может меняться на ПК разных типов (в прил.2 приведены некоторые распространенные варианты кодировки этих символов).

Таблица 4.3

Кодировка символов в соответствии со стандартом ASCII
Код Символ Код Символ Код Символ Код Символ
NUL BL ® "
ЗОН ! A a
STX " В b
ЕТХ # С с
EOT $ D d
ENQ % E e
АСК & F f
BEL " G g
BS ( H h
НТ ) I i
LF * J j
VT + k k
FF , L i
CR - M m
SO . N n
SI / О
DEL p P
DC1 Q q
DC2 R r
DC3 S s
DC4 T t
NAK U u
SYN V V
ETB w w
CAN X X
EM У У
SUB : z z
ESC / [ {
FS < \ l
GS = ] }
RS > ^ ~
US ? - n

Символы с кодами 0...31 относятся к служебным кодам. Если эти коды используются в символьном тексте программы, они считаются пробелами. При использовании их в операциях ввода-вывода они могут иметь следующее самостоятельное значение:

Символ Код Значение
BEL Звонок; вывод на экран этого символа сопровождается звуковым сигналом
НТ Горизонтальная табуляция; при выводе на экран смещает курсор в позицию, кратную 8, плюс 1 (9, 17, 25 и т.д.)
LF Перевод строки; при выводе его на экран все последующие символы будут выводиться, начиная с той же позиции, но на следующей строке
VT Вертикальная табуляция; при выводе на экран заменяется специальным знаком
FF Прогон страницы; при выводе на принтер формирует страницу, при выводе на экран заменяется специальным знаком
CR Возврат каретки; вводится нажатием на клавишу Enter (при вводе с помощью READ или READLN означает команду «Ввод» и в буфер ввода не помещается; при выводе означает команду «Продолжить вывод с начала текущей строки»)
SUB Конец файла; вводится с клавиатуры нажатием Ctrl-Z; при выводе заменяется специальным знаком
SSC Конец работы; вводится с клавиатуры нажатием на клавишу ESC; при выводе заменяется специальным знаком

К типу CHAR применимы операции отношения, а также встроенные функции: СНR(В) - функция типа CHAR; преобразует выражение В типа BYTE в символ и возвращает его своим значением;

UPCASE(CH) - функция типа CHAR; возвращает прописную букву, если СН -строчная латинская буква, в противном случае возвращает сам символ СН, например:

cl:= UpCase("s") ;

c2:= UpCase ("Ф") ;

WriteLn(cl," ",c2)

Так как функция UPCASE не обрабатывает кириллицу, в результате прогона этой

программы на экран будет выдано

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

colors =(red, white, blue);

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

ТипМесяц=(янв,фев,мар,апр,май,июн,июл,авг,сен,окт,ноя,дек);

месяц: ТипМесяц;

if месяц = авг then WriteLn("Хорошо бы поехать к морю!");

был бы, согласитесь, очень наглядным. Увы! В Турбо Паскале нельзя использовать кириллицу в идентификаторах, поэтому мы вынуждены писать так:

TypeMonth=(jan,feb,mar,may,jun,jul,aug,sep,oct,nov,dec);

month: TypeMonth;

if month = aug then WriteLn("Хорошо бы поехать к морю!");

Соответствие между значениями перечисляемого типа и порядковыми номерами этих значений устанавливается порядком перечисления: первое значение в списке получает порядковый номер 0, второе - 1 и т.д. Максимальная мощность перечисляемого типа составляет 65536 значений, поэтому фактически перечисляемый тип задает некоторое подмножество целого типа WORD и может рассматриваться как компактное объявление сразу группы целочисленных констант со значениями О, 1 и т.д.

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

colors = (black, red, white);

ordenal= (one, two, three);

days = (monday, tuesday, Wednesday);

С точки зрения мощности и внутреннего представления все три типа эквивалентны:

ord(black)=0, ..., ord(white)=2,

ord(one)=0, ...ord(three)=2,

ord(monday)=0, ...ord(Wednesday)=2.

Однако, если определены переменные

col:colors; num:ordenal;

то допустимы операторы

num:= succ(two);

day:= pred(tuesday);

но недопустимы

Как уже упоминалось, между значениями перечисляемого типа и множеством целых чисел существует однозначное соответствие, задаваемое функцией ORD(X). В Турбо Паскале допускается и обратное преобразование: любое выражение типа WORD можно преобразовать в значение перечисляемого типа, если только значение целочисленного выражения не превышает мощное1™ перечисляемого типа. Такое преобразование достигается применением автоматически объявляемой функции с именем перечисляемого типа (см. п. 4.4). Например, для рассмотренного выше объявления типов эквивалентны следующие присваивания:

col:= colors(0);

Разумеется, присваивание

будет недопустимым.

Переменные любого перечисляемого типа можно объявлять без предварительного описания этого типа, например:

col: (black, white, green);

Тип-диапазон. Тип-диапазон есть подмножество своего базового типа, в качестве которого может выступать любой порядковый тип, кроме типа-диапазона. Тип-диапазон задается границами своих значений внутри базового типа:

<мин.знач.>..<макс.знач.>

Здесь <мин.знач. > - минимальное значение типа-диапазона;

<макс.знач.> - максимальное его значение.

Например:

digit = "0".."9";

Тип-диапазон необязательно описывать в разделе TYPE, а можно указывать непосредственно при объявлении переменной, например:

Ichr: "A".."Z";.

При определении типа-диапазона нужно руководствоваться следующими правилами:

  • два символа «..» рассматриваются как один символ, поэтому между ними недопустимы пробелы;
  • левая граница диапазона не должна превышать его правую границу. Тип-диапазон наследует все свойства своего базового типа, но с ограничениями, связанными с его меньшей мощностью. В частности, если определена переменная

days = (mo,tu,we,th,fr,sa,su);

WeekEnd = sa .. su;

то ORD(W) вернет значение 5 , в то время как PRED(W) приведет к ошибке.

В стандартную библиотеку Турбо Паскаля включены две функции, поддерживающие работу с типами-диапазонами:

НIGН(Х) - возвращает максимальное значение типа-диапазона, к которому принадлежит переменная X;

LOW(X) -возвращает минимальное значение типа-диапазона.

Следующая короткая программа выведет на экран строку

WriteLn(Low(k),"..",High(k))

Множество целых чисел бесконечно, но мы всегда можем подобрать такое число бит, чтобы представить любое целое число, возникающее при решении конкретной задачи. Множество действительных чисел не только бесконечно, но еще и непрерывно, поэтому, сколько бы мы не взяли бит, мы неизбежно столкнемся с числами, которые не имеют точного представления. Числа с плавающей запятой - один из возможных способов предсталения действительных чисел, который является компромиссом между точностью и диапазоном принимаемых значений.

Число с плавающей запятой состоит из набора отдельных разрядов, условно разделенных на знак, экспоненту порядок и мантиссу. Порядок и мантисса - целые числа, которые вместе со знаком дают представление числа с плавающей запятой в следующем виде:

Математически это записывается так:

(-1) s × M × B E , где s - знак, B-основание, E - порядок, а M - мантисса.

Основание определяет систему счисления разрядов. Математически доказано, что числа с плавающей запятой с базой B=2 (двоичное представление) наиболее устойчивы к ошибкам округления, поэтому на практике встречаются только базы 2 и, реже, 10. Для дальнейшего изложения будем всегда полагать B=2, и формула числа с плавающей запятой будет иметь вид:

(-1) s × M × 2 E

Что такое мантисса и порядок? Мантисса – это целое число фиксированной длины, которое представляет старшие разряды действительного числа. Допустим наша мантисса состоит из трех бит (|M|=3). Возьмем, например, число «5», которое в двоичной системе будет равно 101 2 . Старший бит соответствует 2 2 =4, средний (который у нас равен нулю) 2 1 =2, а младший 2 0 =1. Порядок – это степень базы (двойки) старшего разряда. В нашем случае E=2. Такие числа удобно записывать в так называемом «научном» стандартном виде, например «1.01e+2». Сразу видно, что мантисса состоит из трех знаков, а порядок равен двум.

Допустим мы хотим получить дробное число, используя те же 3 бита мантиссы. Мы можем это сделать, если возьмем, скажем, E=1. Тогда наше число будет равно

1.01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0,5=2,5

Очевидно, что таким образом одно и то же число можно представить по-разному. Рассмотрим пример с длиной мантиссы |M|=4. Число «2» можно представить в следующем виде:

2 = 10 (в двоичной системе) = 1.000e+1 = 0.100e+2 = 0.010e+3.

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

Это экономит один бит (так как неявную единицу не нужно хранить в памяти) и обеспечивает уникальность представления числа. В нашем примере «2» имеет единственное представление («1.000e+1»), а мантисса хранится в памяти как «000», т.к. старшая единица подразумевается неявно. Но в нормализованном представлении чисел возникает новая проблема - в такой форме невозможно представить ноль.

  • Анализ данных с помощью команд Подбор параметра и Поиск решения
  • Анализ и интерпретация данных экспериментально-психологического исследования.
  • Анализ исходных данных. Технические нормативы городской дороги.
  • АНАЛИЗ ПОЛУЧЕННЫХ ДАННЫХ. ПРИНЯТИЕ РЕШЕНИЯ О ДОСТАТОЧНОСТИ ИЛИ НЕДОСТАТОЧНОСТИ ХАРАКТЕРИСТИК ВОДОСНАБЖЕНИЯ ДЛЯ НУЖД СИСТЕМЫ ПОЛИВА.
  • Аппаратура линии связи: аппаратура передачи данных, оконечное оборудование, промежуточная аппаратура.

  • Порядковыми (ordinal) называются типы, которым соответствуют данные, поддерживающие понятия «предшествующее значение» и «последующее значение». Например, для целого числа 5 можно определенно сказать, что ему предшествует число 4, а следующее за ним - число 6. С другой стороны невозможно сказать, какое число непосредственно предшествует вещественному числу 5.0.

    В Object Pascal определены следующие порядковые типы:

    – целые типы;

    – символьные типы;

    – булевы типы;

    – ограниченные типы.

    Для порядковых типов определен ряд функций, которые отражают специфику этих данных. Перечень этих функций приведен в таблице 6.1.

    Таблица 6.1 – Функции для порядковых типов данных

    Продолжение таблицы 6.1

    6.1.1.1 Целые типы данных

    Целые типы данных используются для представления целых чисел. Типами, обеспечивающими максимальную производительность, являются Integer и Cardinal . Оба типа занимают в памяти 4 байта и принимают значения в дапазоне: для Integer -2147483648..2147483647, для Cardina l 0..4294967295. В тех случаях, когда нужен больший диапазон чисел, можно использовать тип int64 .

    Следует помнить, что арифметические операции с целыми числами имеют свои особенности. Для деления используется операция div , которая выполняет целочисленное деление. Остаток от целочисленного деления на некоторое целое число можно найти с помощью операции mod .

    Для целочисленных данных можно использовать и логические операции, такие как and, or, xor . Результат будет определяться применением соответствующей операции к каждой паре соответствующих бит двоичного представления чисел. При выполнении таких операций часто используют 16-ричное представление чисел. Признаком 16-ричного числа является знак $ перед числом, например $FF соответствует десятичному числу 255, а $100 соответствует десятичному числу 256.

    Можно применять и операции сдвигов двоичных кодов числа влево (shl ) или вправо (shr ) на заданное число разрядов. Сдвиг вправо на один разряд соответствует целочисленному делению числа на 2. Сдвиг влево на один разряд соответствует умножению на 2. Например, в результате выполнения инструкции $FF shr 4, получим результат $0F.

    6.1.1.2 Символьные типы данных

    Символьные типы предназначены для представления символов. В Object Pascal можно использовать две разновидности символов:

    Типу Char соответствует множество из 256 символов, в котором символы упорядочены в соответствии с таблицей кодировки ANSI (American National Standard Code for Information Interchange). Каждый символ этого типа занимает 1 байт. Соответствие между кодом и соответствующим ему символом задается так называемой таблицей кодировки символов. Первая половина таблицы (коды от 0 до 127) используется для управляющих символов, цифр, латинских букв и наиболее распространенных символов, таких, как знаки препинания, знаки математических операций и т.п. Вторая половина таблицы (коды от 128 до 255) используется для национальных алфавитов и других символов.

    – Типу WideChar соответствует множество символов Unicode, в котором каждый символ занимает 2 байта, и естественно, эта таблица символов может содержать очень большой список символов. Им соответствуют коды в диапазоне от 0 до 65535. Первые 256 символов в этом множестве соответствуют символам ANSI с соответствующими кодами.

    В наших лабораторных работах мы будем использовать только типChar. Фрагмент таблицы кодировки символов представлен ниже, в таблице 6.2.

    Таблица 6.2 – Кодировка некоторых символов ANSI

    Символ Код Двоичное представление 16-ричное представление
    Отсутствие символа 0000 0000 $00
    Пробел 0010 0000 $20
    ! 0010 0001 $21
    0011 0000 $30
    0011 0001 $31
    0011 0010 $32
    0011 0011 $33
    A 0100 0001 $41
    B 0100 0010 $42
    C 0100 0011 $43
    a 0110 0001 $61
    b 0110 0010 $62
    А $C0
    Б $C1
    а 1110 0000 $E0
    б 1110 0001 $E1
    я 1111 1111 $FF

    Обратите внимание на порядок расположения символов в таблице. Такой порядок позволяет упорядочивать слова и идентификаторы в алфавитном порядке с помощью кода символа.

    Символьные константы можно записывать разными способами. Для большинства символов можно использовать изображение этого символа, заключенное в одинарные кавычки. Например, ‘1’, ‘z’, ‘*’. Специальные символы удобно представлять с помощью их кода, в виде целого числа, которому предшествует знак #. Например, #0, #8, #13. Кроме того, любой символ может быть получен с помощью функции chr(), которой в качестве аргумента передается код символа. Например, chr(65) возвращает прописную латинскую букву ‘A’, а chr(255) – строчную букву ‘я’ кириллицы.

    Обратное преобразование, то есть преобразование символа в код можно выполнить с помощью функции ord(). Например, ord(‘0’) вернет 48.

    При вводе отдельных символов из компонентов класса TEdit, необходимо иметь в виду, что свойство text этих компонентов возвращает не символ, а строку символов. Чтобы получить отдельный символ этой строки следует использовать порядковый номер символа в строке, записывая его в квадратных скобках после имени строки символов. Например, Edit1.text.

    Для символов применимы все операции сравнения. При этом сравниваются коды символов. Поэтому ‘б’ > ’Б’, и ‘а’ кириллицы больше, чем латинское ’a’.

    Группы символов, которые соответствуют буквам, расположены таким образом, чтобы упростить преобразование больших букв в маленькие и наоборот. Разница в кодировке больших и маленьких букв и латинского и русского алфавита равна $20 или 32. Следовательно, чтобы превратить строчную букву в прописную, достаточно из ее кода вычесть 32. Число 32 можно и не помнить, так как его можно получить в результате вычитания кода прописной буквы из кода соответствующей строчной. Например, ord (z) – ord (Z), или оrd (a) – ord (A).

    Особенность кодировки цифр состоит в том, что младший полубайт символа цифры соответствует ее числовому значению в двоичном представлении. Это позволяет легко преобразовывать код символа цифр в соответствующие числа с помощью логической операции and и маски $0F. Например, в результате операции ord (‘5’) and $0F получится число 5.

    Для преобразования символов цифр в соответствующие числа можно использовать тот факт, что символы цифр следуют в таблице кодировки друг за другом в порядке возрастания значений этих цифр.

    Ниже приведено два варианта такого преобразования.

    Первый вариант использует разницу в кодах нуля и выбранной цифры, которая соответствует числовому значению символа цифры

    var c: char; n: integer;

    n:= ord(c)- 48; // что равносильно ord(c) –ord(‘0’);

    Второй вариант такого преобразования использует операцию and $0F с маской $0F.

    const maska = $0F; // константа равная двоичному числу 00001111

    var c: char; n: integer;

    n:= ord (c) and maska; // маска удаляет старший полубайт

    6.1.1.3 Ограниченный тип данных.

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

    Диапазон значений ограниченного типа задается выражением вида: <минимальное значение>..<максимальное значение>.

    Например:

    type TCaps = ‘A’..‘Z’;

    var bigLetter: TCaps; month: 1..12;

    В этих примерах переменная bigLetterможет принимать только символы латинских букв в верхнем регистре, а переменная month значения от 1 до 12.

    Ограниченные типы используются, например, при объявлении массивов.

    В компиляторе Object Pascal имеется опция, позволяющая включить проверку диапазона при присваивании значения переменной ограниченного типа – {$R+} . Её можно включить в том месте вашей программы, где нужно начать проверку диапазона, и выключить в любом месте опцией {$R-} . При попытке присвоить переменной ограниченного типа значение, выходящее за пределы заданного поддиапазона, сгенерируется исключение с сообщением “Range check error”.

    Интервальный тип можно использовать для задания множества данных этого типа путем заключения интервала в квадратные скобки. Например, множество сточных русских букв можно задать таким образом ["а".."я"]. Для определения принадлежности некоторого символа к определенному таким образом множеству можно использовать операцию in , которая возвращает true, если символ принадлежит множеству и false – если не принадлежит. Например, результатом вычисления выражения ‘5’ in [‘0’..’9’], будет true.



    
    Top