22305

Данные и основные операторы

Лекция

Информатика, кибернетика и программирование

Хороший выбор структур данных позволяет разрабатывать на языке Паскаль простые и эффективные алгоритмы. Достоинства Паскаля: он ориентирован на структурное программирование имеет развитые средства контроля и достаточно прост в изучении; язык имеет хороший состав типов и структур данных; трансляторы с Паскаля есть во всех распространенных ПК; конкретные реализации языка дают возможность использовать все аппаратные средства ПК; на основе языка Паскаль разработана Delphi одна из современных систем визуального программирования....

Русский

2013-08-04

725.5 KB

2 чел.

Лекция 2

Данные и основные операторы

Паскаль - один из наиболее перспективных языков программирования. Он разработан в 1971 г. математиком Никлаусом Виртом, профессором Института информатики Швейцарской высшей политехнической школы в Цюрихе. Язык получил наименование в честь знаменитого математика и философа Блеза Паскаля (1623-1662), который одним из первых изобрел в 1641 г. калькулятор (суммирующую машину).

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

  1.  он ориентирован на структурное программирование, имеет развитые сред
    ства контроля и достаточно прост в изучении;
  2.  язык имеет хороший состав типов и структур данных;
  3.  трансляторы с Паскаля есть во всех распространенных ПК;
  4.  конкретные реализации языка дают возможность использовать все аппарат
    ные средства ПК;
  5.  на основе языка Паскаль разработана Delphi - одна из современных систем визуального программирования.

Недостатки языка Паскаль: в нем нет операции возведения в степень. Из-за богатства возможностей язык не прост для освоения в полном объеме при первоначальном изучении.

Структура языка Паскаль

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

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

Структура различных языков программирования однотипна. Они должны иметь средства для:

определения свойств объектов программы (ее данных);

определения обработки, т. е. получения новых значений объектов;

организации процесса обработки данных (разветвлений процесса обработки
данных и циклической обработки);

ввода-вывода данных, т. е. обмена данными между ОП и внешними устрой
ствами (магнитными дисками, портами, принтером);

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

Схематично структура языка Паскаль приведена на рис.1.

Рис. 1

Структура языка Паскаль

Алфавит языка Паскаль

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

Буква : : = А | В | С | ... |x|Y|z|a|b|c| ...|y|z 

Цифра ::=0 | 1 | 2 | 3 | 4 | 5 | б | 7 | 8 |9

Специальные символы : : = арифметические операции |

             логические операции | операции отношения |

операции над множествами | ограничители | ключевые слова Арифметические операции :: = +|-|*|/|D!V| MOD 

Логические операции : : = NOT    AND | OR | XOR | SHL | SHR 

Операции отношения : : = = | <> | < | <= | >= | > | IN 

Операции над множествами : : = + | - | * | IN 

Ограничители и разделители ::=(|)|[|]|{|}|(*|*)|

.| ..| , | ; | : | ' |:=

Символ ::= означает "равно по определению". Символ | - означает "или".

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

В текстах программ допускаются комментарии и пробелы.

Комментарий - это текст, поясняющий программу и не влияющий на процесс ее выполнения. Комментарии ограничиваются символами {и} или {*и*}. Комментарий можно вставить между двумя рядом стоящими идентификаторами, числами, специальными символами или перед первым оператором программы. Цель комментариев - пояснить объекты и действия программы. Например:

{ Это комментарий } (* Это тоже комментарий *)

При использовании комментариев в комментариях надо применять разные типы ограничителей комментариев; например, для внутренних комментариев использовать ограничители { и }, а для внешних - ( * и *). Например:

(* А   := В + С;   {   это вычисления   }   D   := Е -  F;   *)

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

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

пояснения о назначении используемых переменных программы;

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

пояснения логически сложных частей программы (разветвлений, циклов);

  1.  комментарий, в котором первым символом является знак $ (доллара), определяет директивы Паскаля.

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

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

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

Классификация данных

Данные - это формализованное представление информации. Они обрабатываются программами. Данные могут быть в виде констант и переменных. Константы - это конкретные значения данных. Например: 2,5, Маша. Переменные - это данные, которые в процессе выполнения программы могут принимать различные значения.

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

Рис.2

Классификация типов проблемных данных

Классификация операторов

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

Все операторы языка Паскаль можно разбить на ряд групп. Классификация операторов и типов выражений на языке Паскаль дана на рис.3.

В одной строке текста программы можно поместить один и более операторов. Один оператор может занимать одну и более строк. В конце оператора ставится ;. если нет других ограничителей, например слов END или ELSE. Максимальная длина строки программы 126 символов; но целесообразно использовать видимую часть экрана, т. е. 78 символов строки. Программы и данные можно писать с первой позиции экрана.

Рис. 2.3

Классификация операторов языка Паскаль

Встроенные процедуры и функции языка Паскаль

В языке Паскаль можно использовать как подпрограммы (процедуры и функции), разработанные программистом, так и встроенные (стандартные) подпрограммы, расположенные в его модулях (библиотеках). Паскаль содержит 8 стандартных модулей, в том числе: System, Crt, Dos, Graph, Overlay. Для использования их процедур и функций надо после оператора PROGRAM записать оператор

Uses  список-имен-используемых-модулей.

Например:

Program KR ;

Uses Crt, Graph;

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

  1.  процедуры управления выполнением программы;
  2.  функции преобразования типов;
  3.  процедуры и функции для переменных ординального типа;
  4.  математические функции;
  5.  процедуры и функции для работы со строками;
  6.  процедуры и функции управления динамической памятью;
  7.  процедуры ввода-вывода и работы с файлами и каталогами.

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

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

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

Структура программы на языке Паскаль

Программа на языке Паскаль состоит из заголовка программы и блока (тела программы). Заголовок программы или подпрограммы - это один из операторов:

PROGRAM - для программы;

PROCEDURE - для Процедуры;

FUNCTION - для функции.

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

PROGRAM имя-программы;

Пример структуры программы:

Program PR;  - Заголовок программы

Объявления типов, констант, меток и переменных;

Procedure А;...Begin...End;  Процедуры и

Function В;...Begin...End;   функции программы    Блок

                                                 Программы

Begin ...

Операторы программы PR;

End.

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

1)декларативной - описания (объявления) данных программы и текстов под
программ (разделы описаний);

2)выполнимой - описания действий, которые надо выполнить над данными
(раздел операторов).

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

LABEL - для определения меток программы;

CONST - для определения констант;

TYPE - для определения типов данных;

VAR - для определения переменных;

PROCEDURE и FUNCTION - для определения процедур и функций;

BEGIN - определяет начало раздела операторов программы.

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

Последовательность разделов описания объектов (LABEL, CONST, TYPE, VAR и др.) программы может быть произвольной. В случае необходимости типы разделов могут повторяться. Умолчаний в Паскале нет. Все, что используется в программе: константы, переменные, метки, - должно быть объявлено явно. Каждый объект программы должен быть описан и только один раз для данной области действия. Объекты программы имеют областью их действия блок, в котором они объявлены, и все вложенные в него блоки, процедуры и функции, в которых они не переобъявлены. Поэтому одни и те же идентификаторы можно использовать в различных подпрограммах (процедурах и функциях) программы в разных смыслах.

2. Данные языка. Основные понятия

Концепция данных языка Паскаль

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

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

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

  1.  каждая константа, переменная, значение функции имеет тип;
  2.  тип переменной определяется в разделе типов или переменных;
  3.  тип определяет:

а) множество различных значений переменной; количество этих значений
называют мощностью типа;

б) набор операций, которые можно применять к значениям данного типа;

в) формат внутреннего представления значения;

г) объем ОП, занимаемый одним значением.

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

Ко всем типам данных (кроме меток и файлов) применимы оператор присваивания и операции сравнения.

Классификация типов данных языка Паскаль приведена на рис.2. Все типы данных языка Паскаль можно разделить по назначению на 2 группы: проблемные .и управляющие. Проблемные используются для представления данных пользователя, управляющие предназначены для управления процессом обработки данных. Типы проблемных данных также можно разделить на 2 группы: простые (основные) и сложные (производные, структурированные, агрегаты). В простых типах (более распространено наименование "скалярный" тип) каждое значение состоит из единственного данного. Сложные типы образуются из других типов, которые могут быть как простыми, так и сложными. Умение разрабатывать типы данных, наиболее подходящие для решения той или иной задачи, и умение работать с ними можно получить только в процессе систематического практического решения различных конкретных задач.

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

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

Элементарные конструкции языка Паскаль

Элементарные конструкции языка - это идентификаторы, метки и константы. Рассмотрим их.

Идентификаторы

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

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

Примеры идентификаторов: A, ALFA,  B2,  TEST_PR.

В идентификаторах большие и маленькие буквы тождественны, т. е. NAME, Name и name - один и тот же идентификатор.

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

Таблица 1.  Примеры ключевых слов языка Паскаль

Слово 

Значение 

Слово 

Значение 

Слово 

Значение 

AND 

И 

FUNCTION 

ФУНКЦИЯ 

REPEAT 

ПОВТОРИТЬ 

ARRAY 

МАССИВ 

GOTO 

ПЕРЕЙТИ 

SET 

МНОЖЕСТВО 

BEGIN 

НАЧАЛО 

IF 

ЕСЛИ 

SHL 

СДВИГ ВЛЕВО 

BOOLEAN 

БУЛЕВ 

IMPLEMENTATION 

РЕАЛИЗАЦИЯ 

SHR 

СДВИГ ВПРАВО 

CASE 

ВАРИАНТ 

IN 

В 

STRING 

СТРОКА 

CONST 

КОНСТАНТА 

INTERFACE 

ИНТЕРФЕЙС 

THEN 

то 

DIV 

ДЕЛЕНИЕ 

INTERRUPT 

ПРЕРЫВАНИЕ 

TO 

ДО 

DO 

ВЫПОЛНИТЬ 

LABEL 

МЕТКА 

TRUE 

ИСТИННО 

DOWNTO 

ШАГ-1 

MOD 

ОСТАТОК 

TYPE 

тип 

ELSE 

ИНАЧЕ 

NOT 

HE 

UNIT 

МОДУЛЬ 

END 

КОНЕЦ 

OF 

ИЗ 

UNTIL 

ПОКА 

EXTERNAL 

ВНЕШНИЙ 

OR 

ИЛИ 

USES 

ИСПОЛЬЗОВАТЬ 

FALSE 

ЛОЖНО 

PACKED 

УПАКОВАН 

VAR     • 

ПЕРЕМЕННАЯ 

FILE 

ФАЙЛ 

PROCEDURE 

ПРОЦЕДУРА 

WHILE 

ПОКА 

FOR 

ДЛЯ 

PROGRAM 

ПРОГРАММА 

WITH 

ПРИСОЕДИНИТЬ 

FORWARD 

ВПЕРЕД 

RECORD 

ЗАПИСЬ 

XOR 

ИСКЛЮЧ. ИЛИ 

Метки

Любой оператор в программе может быть помечен меткой. Метка ставится перед оператором и отделяется от него двоеточием.

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

Форма определения меток:

LABEL список-меток;

Пример:

LABEL MN,M1,M2,23;

...

MN: А:=В+С;...Ml:М2:В:=С-D;

Константы

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

А   :=  В  +   2.5;

где     2.5- неименованная константа.

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

CONST  список-определений-констант

Форма определения каждой именованной константы списка:

имя-константы = выражение  ;

где     выражение определяет значение константы.

Тип именованной константы определяется ее значением.

В языке Паскаль разрешается использовать при определении констант выражение, операндами которого могут быть ранее определенные константы и встроенные функции: Abs, Chr, Length, Ord, Odd, Pred, Round, SizeOf, Succ, Trunc.

Например:

CONST  C1 = -2.3025; C2 = 1/C1; C3=Abs(C1);

В качестве констант на языке Паскаль можно использовать целые, вещественные и шестнадцатеричные числа, логические константы, символы, строки и конструкторы множеств. Например:

CONST { Типы констант: }

К = 25 ;    I = 123 ; { - целые }

R = 1.2345 ; А = -1.234Е-5 ; { - вещественные }

Е = 1 / R ;  EPS = 1E-6 ; { - вещественные }

В = TRUE ; { - логическая }

F = 'Z' ;  F1 = '';   F2  = ' ' ' ' ;    { - символьные }

С = 'МАША' ;  Е2  = ' О' ' ГЕНРИ' ;     { - строковые  }

MN = [ KR, ZEL ] ;   MNP = [] ;     { - множества  }

Целые могут быть со знаком или без него и иметь значение в диапазоне от -2147483648 до +2147483647. Вещественные - в виде дроби или в виде мантиссы и экспоненциальной части (порядка числа).

Например, на Паскале: 3.45ЕЗ, -17Е-2, 1.234,

что соответствует значениям: 3,45103, -1710-2, 1,234.

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

Определение типа данных

Определения новых (пользовательских) типов объединяются в раздел определения типов. Определение типа вводит имя типа. Оно используется для описания производных (пользовательских) простых и сложных (структурированных) типов данных. Стандартные типы определены по умолчанию. К ним относят: вещественные, целые, булевы (BOOLEAN), символьные (CHAR) и строки

(string).

Форма определения типа:

TYPE список-определений-типа

Определение одного элемента списка-определений-типа:

Идентификатор-типа = тип ;

Пример:

TYPE { Начало раздела определения типов }

VEKTOR = ARRAY [1 .. 20] OF REAL ;

MATR  = ARRAY [1 .. 20, 1 .. 30] OF INTEGER ;

STROKA = STRING [10] ;
VAR { Начало раздела определения переменных }

А, В : VEKTOR ;

С, D : MATR ;

Е, F : STROKA ;

Приведенные в примере типы переменных можно определить не в разделе типа, а в разделе определения переменных. Например:

VAR А, В : ARRAY [1 .. 20]  OF REAL;

Объявление переменных

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

Форма определения переменных:

VAR список-объявлений-переменных

Определение переменных одного элемента описка-объявлений:

Список-идентификаторов-переменных   :   тип   ;

где     тип - это имя стандартного или пользовательского типа.

Стандартные типы: INTEGER, REAL, BOOLEAN, CHAR, STRING. Элементы списка-идентификаторов-переменных разделяются запятыми.

Пример:

VAR { Начало раздела, где переменные: }

А, В, I, J : INTEGER ; { - целого типа  }

X, Y, Z, R : REAL ; { - вещественные }

С, D : BOOLEAN ; { - логические   }

Е, F : CHAR ; { - символьные   }

STROKA : STRING ; { - строковая   }

Совместимость и преобразование типов данных

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

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

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

TYPE T1 = ARRAY [1 .. 10] OF INTEGER ;

    Т2 = ARRAY [I .. 10] OF INTEGER ;

VAR VI, V2 : T1 ;

       V3 : T2 ;

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

Типы Т1 и Т2 идентичны (одинаковы), если:

  1.  Т1 и Т2 - это один и тот же тип;
  2.  они определены один через другой, т. е.

TYPE Tl  =  Т2;   или  TYPE Т2  = Tl;

При вычислении выражений и при выполнении операции присваивания операнды должны быть совместимы. Во время вычисления выражений два типа операндов совместимы, если:

  1.  оба они одного типа;
  2.  один операнд - вещественный, другой - целый;
  3.  один операнд является диапазоном типа второго операнда;
  4.  оба операнда - диапазоны одного и того же базового типа;
  5.  оба операнда - множества, составленные из элементов одного и того же базового типа данных;
  6.  оба операнда - строки;
  7.  один операнд типа - строка, другой - символ.

Если Т1 - тип переменной левой части оператора присваивания, а Т2 - тип результата выражения его правой части, то присваивание возможно, если:

  1.  Т1 и Т2 - один и тот же тип;
  2.  Т1 и Т2 - совместимые порядковые типы и значение Т2 лежит в диапазоне
    возможных значений
    Tl;
  3.  Tl и Т2 - вещественные типы и значение Т2 лежит в диапазоне возможных
    значений Т1;
  4.  Т1 - вещественный тип, Т2 - целый тип;
  5.  Т1 - строка, Т2 - строка или символ;
  6.  Т1 и Т2 - совместимые множества и все элементы Т2 принадлежат множеству возможных значений Tl.

Преобразование типов в Паскале может быть явным или неявным. При явном преобразовании типов используются вызовы специальных функций, аргументы которых принадлежат одному типу, а результат другому. Это, например, функции ORD, ODD, TRUNC, ROUND, CHR.

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

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

Явное преобразование может производиться с помощью стандартных функций (odd, Trunc, Round, Ord, Chr) и с помощью операции приведения типа. Форма операции приведения типа:

имя-типа   (имя переменной   |   выражение)

Операция приведения типа может находиться как в левой части оператора присваивания, так и в правой. Если она стоит в левой части оператора присваивания, в скобках может быть только имя переменной. Если в правой - то и выражение.

Пример программы с явным преобразованием типов приведен в листингах 1 и 2.

Листинг 1. Явное преобразование символов и чисел.

var  si   :   0..255;

     а   :   byte;

     с   :   char;

begin 

char(si) ='A';     {   - приведение типа в левой части:

             из чего - char - преобразуется для si ! ! }

si  := ord ('С'); {   - приведение типа в правой части:

                  во что преобразуется  }

si  := byte('E');

а   := byte('D');

char(а) :=   'В';

с  := 'F' ;

byte (с) := si; {   - из чего - byte - для С  }

byte(с) := а;

end.

Листинг 2. Явное преобразование целых и перечислимых данных.

type

Days = ( Monday, Tuesday, Wendnesday, Thursday, Friday, Satuday, Sunday);

var

aDay : Days;

Num  : byte;

begin

Days(Num) := Monday; { - из чего Days преобразуется }

aDay := Days(Num); { - во что преобразуется }

Num := byte(Friday);        { - "  "   "     }

Num := ord (Friday);        { - "  "   "     }

aDay := Days(Num +1);       { - параметр в виде выражения }

Num :=byte(Pred(Friday));{- параметр - обращение к функции }

end.

3. Простые типы данных

К простым типам данных отнесем:

  1.  типы, определенные в языке (стандартные типы): вещественные, целые, логические, символьные, строки;
  2.  типы, определенные пользователем: перечисляемые и диапазонные (интервальные, ограниченные).

Для простых типов данных распространено наименование "скалярные типы". Скаляр (скалярная переменная или константа) содержит только одно значение.

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

Вещественный тип данных

Областью вещественных значений является подмножество вещественных чисел. В Паскале имеется 4 вещественных типа, приведенных в табл. 2. Выбор одного из типов для представления переменных программы определяется требуемой точностью (количеством разрядов мантиссы) их представления и диапазоном представления значений их порядка. Как правило, выбирают минимальный диапазон порядка и минимальную разрядность мантиссы, удовлетворяющие требованиям задачи. Это позволяет экономить объем ОП, используемой для чисел.

Таблица 2.  Характеристики вещественных типов данных

Длина в байтах 

Имя типа 

Разрядность десятичной мантиссы 

Диапазон десятичного порядка 

4 

single 

7 .. 8 

-45 .. +38 

6 

real 

11 .. 12 

-39 .. +38 

8 

double 

15 .. 16 

-324 .. +308 

10 

extended 

19.. 20 

-4932 .. +4932 

Мантисса вещественных значений хранится в двоичной системе счисления в нормализованной форме. Точка мантиссы - перед левым (старшим) разрядом, т. е. мантисса дробная. Доступ к типам Single, Double и Extended возможен только при определенной настройке компилятора (директивой {$N+}).

Пример объявления вещественных типов данных:

VAR    A : SINGLE; { Для 7-8-разрядной мантиссы }

   В, С : REAL;  { Для 11-12-    "       "     }

      D : DOUBLE; { Для 15-16-   "      "    }

      Е : EXTENDED; { Для 19-20-    "      "     }

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

Значениями целого типа являются элементы подмножества чисел, зависящего от реализации языка. Диапазон возможных значений зависит от памяти, выделенной для их хранения. Основные характеристики целых языка Паскаль приведены в табл. 3. Выбор одного из типов данных определяется диапазоном используемых значений переменных. Целые хранятся в двоичной системе счисления в виде последовательности 1 и 0.

Таблица 3.  Характеристики целых типов данных

Длина в байтах 

Имя типа 

Тип данных 

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

1

shortint 

короткое целое 

-128 

.. +127 

1 

byte 

длиной в байт 

0 

.. 255 

2 

word 

длиной в слово 

0 

.. 65535 

2 

integer 

целое 

-32768 

.. 32767 

4 

longint 

длинное целое 

-2147483648 

.. +2147483647 

Пример объявления переменных целого типа:

VAR I, J :SHORTINT;{Короткое целое со знаком длиной 1 байт}

   К, L : BYTE; { Целое без знака длиной в байт }

   М, N : WORD; {   "   "   "    "   " слово: 2 байта }

      Р : INTEGER;{ Целое со знаком длиной 2 байта }

      Q : LONGINT;{Длинное целое со знаком длиной 4 байта }

Логический тип данных

Логический тип данных имеет описатель Boolean и определяет одно из двух значений: TRUE (истинно) или FALSE (ложно). Они упорядочены: у false - порядковый номер 0, у true - порядковый номер 1.

Значение логического типа занимает 1 байт ОП.

Пример объявления переменных логического типа:

VAR    А,   В,   С   :   BOOLEAN;

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

Например:

VAR    А,   В,   С   :   BOOLEAN; ...

D := 7; A := D > 5;  ...  В := A AND С; A   := TRUE;

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

Символьный тип данных объявляется описателем CHAR. Значением символьного типа ( CHAR ) может быть только один любой символ алфавита языка. Все символы алфавита упорядочены в компьютере в соответствии с их внутренним кодом: 0 .. 255. Этот код в виде целого числа возвращает функция ORD(X) в качестве результата, если параметром является символ алфавита. В ОП один символ занимает 1 байт. Если нужен сам апостроф, он удваивается.

Например:

VAR  А,В,: CHAR;  ...   А := 'А';  В :=''''; ...

Строковый тип данных

Строковый тип данных используется для обработки текстов. Определяется строковый тип в виде string [ n ], где 1 < n < 255. По умолчанию n = 255. Строка - это последовательность символов. Ее можно рассматривать как скалярное значение (простой тип) или как совокупность из n символов массива (сложный тип): строка имеет свойства и простых и сложных типов. Например, при вводе и выводе строк можно использовать имя строки (свойство простой переменной).С другой стороны, к любому символу в строке можно обратиться так же, как к элементу массива (сложный тип данных) из n символов.

Например:

VAR  ST : STRING ;   { Объявлена строка на 255 символов }

...   If ST[5] = 'A' THEN ...    { ST[5] - элемент массива }

Элементы строки имеют номера от 0 до п. Нулевой байт памяти содержит текущую длину строки. В процессе обработки данных для строки выделяется память, равная длине присвоенной ей символьной константы, увеличенной на единицу. Таким образом, ее длина может быть от 0 до n, а ОП для нее от 1 до (n + 1) байт.

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

ST := 'Иванов И.И.';    ST := ' О11ГЕНРИ1;

Перечисляемый тип данных

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

Форма определения:

TYPE имя-типа = ( список-значений-констант ) ;

Например:

TYPE CVET = ( KR, ORG, GEL, ZEL, GOL, SIN, FIOL ) ;

NEDELYA = ( PN, VT, SR, CHT, PT, SB, VS );

  TABC = (А, В, С);

VAR VAR_CVET : CVET;        { - переменная типа CVET }

        ABC : TABC;        { -     "       "  TABC }

        EFG : (E, F, G); {- переменная перечисляемого типа }

Последовательность перечисления констант автоматически нумеруется от 0 до N, где N < 255. Таким образом, максимальная мощность перечисляемого типа равна 256.Номера задают последовательность упорядоченности значений. В примере номера значений типа CVET и типа NEDELYA изменяются от 0 до 6. При выполнении операций отношения между ними устанавливаются соотношения. Например:

KR  <  ORG  <  GEL  <   ZEL < и т. д.

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

К перечисляемым значениям применимы порядковые функции ORD, PRED и SUCC.

ORD(X) - определяет порядковый номер значения X в упорядоченной последовательности значений.

PRED(X) - формирует значение результата в виде значения, предшествующего значению X в упорядоченной последовательности значений.

SUCC(X) - формирует результат в виде значения, следующего после значения X в упорядоченной последовательности значений.

Например:

ORD(ORG)   =   1;   PRED (ORG)   =  KR;   SUCC (ORG)   =  GEL.

Диапазонный тип данных

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

Достоинства данных диапазонного типа:

  1.  улучшается удобочитаемость программ;
  2.  уменьшается   мощность   (количество)   значений   переменной;   это   может
    уменьшить требуемый объем ОП;
  3.  все значения, присваиваемые переменным диапазонного типа, можно контролировать на допустимость значений средствами системы.

Диапазонный тип данных можно определить в разделах TYPE или VAR. Форма определения диапазонного типа данных:

TYPE  имя-типа  =  <н.г.>   ..   <в.г.>   ;

где н. г. и в. г. - значения нижней и верхней границ подмножества ординальных значений базового типа. Н. г. должна быть меньше в. г. Две точки между значениями границ - один составной символ. В заданном интервале должно быть хотя бы одно значение. Примеры объявления диапазонных значений в разделах TYPE и VAR:

TYPE      { Определения в разделе TYPE}

     М = 1 .. 20 ;

     VRGODA = ( VESNA, LETO, OSEN, ZIMA ) ;

     SEZON  = VESNA .. OSEN ;

     BUKVA  = 'А' .. ' I' ;

     DLMES  =28 .. 31 ;

     DIGIT  = '0' .. '9' ;

VAR      X, Y, Z :  М ;

         VREM   :   SEZON ;

     SIM1, SIM2 :  BUKVA ;

              L :  DLMES ;

VAR   { Определения в разделе VAR }

        X, Y, Z :  1 .. 20 ;

          SEZON :  VESNA .. OSEN ;

     SIM1, SIM2 :  'A' .. 'I' ;

Если на одном базовом типе определено несколько интервальных типов, то переменные этих типов можно использовать в одном выражении.


 

А также другие работы, которые могут Вас заинтересовать

50161. Инновации в антикризисном управлении 25.93 KB
  Любая социально-экономическая система достигает успеха в своей деятельности, если она находится в состоянии последовательного и неуклонного развития. Если руководство не нацелена на освоение новых технологий, позволяющих производить новые виды продукции более высокого качества и с наименьшими затратами...
50162. Зміна ширини кроків і швидкості руху. Команди та дії 49.5 KB
  Стройові вправи. Загальнорозвивальні вправи. Загальнi методичнi рекомендацiï до складення комплексiв загальнорозвивальних вправ: завдання змiст пiдбiр вправ послiдовнiсть вправ у комплексi; чергування спрямованностi вправ тощо. Варiанти послiдовностi вправ у комплексi.
50163. Нечеткая логика 67.5 KB
  Блондинка -– рыжая - брюнетка unit Unit1; interfce uses Windows Messges SysUtils Vrints Clsses Grphics Controls Forms Dilogs ComCtrls StdCtrlsmth TeEngine Series ExtCtrls TeeProcs Chrt; type TForm1 = clssTForm Chrt1: TChrt; Series1: TLineSeries; Series2: TLineSeries; Series3: TLineSeries; Series4: TBrSeries; TrckBr1: TTrckBr; Lbel1: TLbel; Lbel5: TLbel; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Lbel6: TLbel; Lbel2: TLbel; Lbel3:...
50164. Программирование задач с использованием функций пользователя, выдающих один и несколько результатов 58.5 KB
  Вы можете написать свои функции и затем использовать их так же как функции из библиотек языка С или С. Собственные функции помещаются после закрывающей фигурной скобки min. Каждая функция имеет структуру аналогичную структуре функции min. Функцию можно вызвать из любого места программы в том числе из другой функции.
50165. ИЗУЧЕНИЕ РАБОТЫ ДИФРАКЦИОННОГО СПЕКТРОГРАФА С АВТОМАТИЧЕСКОЙ РЕГИСТРАЦИЕЙ СПЕКТРА МНОГОКАНАЛЬНЫМ ФОТОПРИЕМНИКОМ 125 KB
  Цель работы: практическое изучение работы дифракционного спектрографа и определенние его основных спектральных характеристик а также ознакомление с работой многоканального фотоприёмника работающего в комплексе с компьютером и применяемого для регистрации спектров вместо фотопластинки или фотопленки. При изучении различных объектов и процессов мощным средством ддя получения информации служит спектральный анализ суть...
50166. Тактика захисту: індивідуальна, групова та командна 29 KB
  Гра в захисті передбачає організацію позиції і дій гравців з метою запобігти чи утруднити атакуючим можливість наблизитися до воріт і завдати точного удару. Гра в обороні різноманітна багатопланова і спрямована на захист воріт на активну боротьбу за оволодіння м’ячем і організацію успішної атаки. Чим ближче суперник до воріт тим щільніше його треба закривати. При протидії комбінації “схрещування†ті хто обороняється повинні особливо уважно контролювати дії гравця у якого опинився м’яч щоб перепинити йому шлях до воріт.
50168. Изучение свойств ферромагнетика с помощью осциллографа 2.49 MB
  Получение основной кривой намагничивания и зависимости магнитной проницаемости от напряженности магнитного поля ферромагнитного образца путем исследования гистерезисной петли на экране осциллографа. Теоретические основы лабораторной работы Использование магнитного поля в промышленности нашло широкое применение. В обогатительном деле при помощи магнитного поля производят сепарацию магнитные сепараторы т. Без магнитного поля не смогли бы работать электромашинные генераторы и электродвигатели.
50169. Організація виробництва як основа організації праці на підприємстві 482 KB
  Організація праці на підприємстві — це система здійснення трудового процесу, що визначає порядок і умови поєднання та здійснення складових його часткових трудових процесів, взаємодії виконавців і їх груп із засобами праці й один з одним для досягнення поставленої предметної мети спільної діяльності і забезпечення заданого соціально-економічного ефекту.