Архитектура Аудит Военная наука Иностранные языки Медицина Металлургия Метрология
Образование Политология Производство Психология Стандартизация Технологии


Сортировка данных в динамической памяти.



Ссылочные типы данных.

Автоматич. переменные – это перем., порождаемые перед выполнением проги или подпроги, котоые сущ-ют в течение всего времени ее выполнения. Объем памяти, необход. для хранения автом. перем., не изменяется в ходе выполнения проги. Автом. перем. опред. в var. Обращение к ним осущ-ся с пом. их имен.

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

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

< Тип_указателей>:: =

→ ^→ < ид._типа> →

└ → → Pointer→ → ┘

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

type mas=array [1..10] of integer;

admas=^mas;

p1=^integer;

var p: ^integer;

q: ^char;

pp: p1;

pt: pointer;

adrm: admas;

Сами указатели явл. автом. перемен. ссылочного типа. Указатель занимает 4 байта. Дин. переменные в проге не объявляются => единств. средством доступа к ним явл. указатели. Иногда необход. в кач-ве значения указателя принять пустую ссылку (не связывать с данным указателем дин. переменную). Для этого исп-ся nil. константа nil совместима с любым типом указателя.

Над значениями ссылочного типа нет операций, которые давали бы результат того же типа. Определены только присваевание и 2 операции сравнения (: =, <, > ).

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

1. nil;

2. ссылочная переменная;

3. ссылочная функция;

Объявление ссылочной переменной в разделе Var не порождает самой динамической переменной. По этому объявлению транслятор только отводит место в памяти для размещения указателя.

 

 


Оператор NEW.

Для порождения дин. переменной исп-ся проц-ра new(p), р – ссылочная переменная любого типа. New размещает дин. переменную типа указатель. Переменной выделяется память, достаточная для хранения наиболее длинного значения типа указателя. Адрес начала данного места памяти присваивается р. Для дин. переменных new играет ту же роль, что раздел var для автоматических переменных. Никакого значения new дин. переменной не присваивает. Для обращения к дин. перем. исп-ся

< переменная_с_указателем>:: =

< ссыл._перем.> ^.

☻ Пример:

var p: ^integer; x: integer;

………….

new(p);

p^: =15;

x: =x+p^;

p^: =p^ mod 5;

adrm^[p^+2]: =14;

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

Возможна организация массивов указателей:

type p1=^integer;

var a: array[1..20] of integer;

……………..

for i: =1 to 20 do

new(a[i]);

……………..

a[i]^: =25;

!!! Идентификатор типа в определении ссыл. типа может быть объявлен как до, так и после его исп-ния, в отличие от всех других типов.

Пример:

type admas=^mas;

mas=array [1..10] of integer;

Пример:

var x, y: ^integer;

begin

new(x);

new(y);

x^: =5;

y^: =10;

x: =y;

y: =nil;

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

Сортировка данных в динамической памяти.

При сортировке данных в динамической памяти, меняются только значения указателей на следующие/предыдущие поля. Т.е. если цепочка 1—3 — 2, то указатель у 1.след меняется на 2, указатель у 2.след меняется на 3, а указатель 3.след обнуляется.

 

Файлы с прямым доступом.

Массив данных – в памяти.

Набор данных – на диске.

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

var F: File of real;

read(F, A); - прочитать компонент из файла и записать в переменную. Тип одинаковый!

assign(ифп, спец); - привязать имя файла к файловой переменной.

ифп – переменная

спец – путь к файлу C: \A\B\...\a.txt

reset(F); - открыть файл для чтения и добавления компонентов в конец файла.????

rewrite(F); - открыть файл для перезаписи (содержимое удаляется).

seek(ифп, №); - переходит к определённомукомпоненту в файле.

№ - номер блока, начинается с нуля. Т.е. seek(F, 3) – Переход к 4 компоненту.

truncate(ифп); - для отсечения хвостовой части файла начиная от текущего положение указателя включая текущий компонент.

filesize(ифп); - количество компонентов.

filepos(ифп); - текущее значение указателя.

Первое поле в компоненте – ноль.

1) отсортировано

2) без пропусков номера (ключевое поле без пропусков).

Способы формирования:

1) Добавлять попорядку

2) Добавить все компоненты пустыми и обрабатывать.

 

Нетипизированные файлы.

Нетипизированные файлы представляют собой каналы ввода-вывода нижнего уровня, используемые в основном для прямого доступа к любому файлу на диске, независимо от его типа и структуры. Любой нетипизированный файл описывается словом file без атрибутов. Например:

var

DataFile: file;

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

По историческим причинам принимаемая по умолчанию длина записи равна 128 байтам. Предпочтительной длиной записи является

длина записи, равная 1, поскольку это единственное значение, которое позволяет точно отразить размер любого файла.

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

которые допускается использовать с типизированными файлами. Вместо процедур Read и Write здесь используются соответственно проце-

дуры Blockrеаd и BlockWrite позволяющие пересылать данные с высокой скоростью.

 

6. Особенности работы с типами в TP. Явные преобразования типов.

Приведение типов позволяет рассматривать одну и ту же величину в памяти ЭВМ как принадлежащую разным типам. Для этого используется конструкция:

Имя_Типа(переменная или значение)

Например:

Integer(‘Z’); - представляет собой значение кода символа в двухбайтном представлении целого числа

Byte(534); - даст значение 22, поскольку целое число 534 имеет тип Word и занимает 2 байта, а тип byte – один байт, и в процессе приведения старший байт будет отброшен.

 

Эквивалентность типов.

Говорят, что типы T1 и T2 эквивалентны, если выполняется одно из следующих условий:

T1 и T2 совпадают

T1 и T2 - динамические массивы с совпадающими типами элементов

T1 и T2 - указатели с совпадающими базовыми типами

T1 и T2 - множества с совпадающими базовыми типами

T1 и T2 - процедурные типы с совпадающим списком формальных параметров (и типом возвращаемого значения - для функций)

Например: type

T1 = integer;

T2 = T1;

T3 = T2;

Если типы эквивалентны только если их имена совпадают, то говорят, что имеет место именная эквивалентность типов. Если типы эквивалентны если они совпадают по структуре, то говорят, что имеет место структурная эквивалентность типов.

 

 

Совместимость типов.

Иногда, например, в выражениях и операциях сравнения, требуется совместимость типов. Совместимость типов, кроме того, является важной предпосылкой для совместимости по присваиванию.Совместимость типов имеет место, если выполняется по крайней мере одно из следующих условий: * Оба типа являются одинаковыми.* Оба типа являются вещественными типами.* Оба типа являются целочисленными.* Один тип является поддиапазоном другого.* Оба типа являются отрезками одного и того же основного типа.* Оба типа являются множественными типами с совместимыми базовыми типами.* Один тип является строковым типом, а другой - строковым типом, упакованным строковым типом или типом PChar; * Один тип - это тип Pointer, а другой - любой ссылочный тип.* Один тип является типом PChar, а другой - символьным массивом с нулевой базой вида array[0..X] of Char (это действует только при разрешении директивой {$X+} расширенного синтаксиса).* Оба типа являются указателями идентичных типов (это действует только при разрешении указателя с проверкой типа директивой {$X+}).* Оба типа являются процедурными с идентичными типами результатов, одинаковым числом параметров и соответствием между параметрами.

Типизированные константы.

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

Типизированные константы подобны инициализированным переменным (переменным с заданными начальными значениями).В отличие от нетипизированных констант, объявление тnипизированной константы определяет сразу и тип, и значение константы. Типизированные константы могут использоваться подобно переменным того же самого типа, и могут находиться в левой части оператора присваивания.Обратите внимание: Типизированные константы инициализируются только один раз - при их создании в начале программы. При каждом входе в процедуру или функцию, локальные Типизированные константы не инициализируются повторно.В дополнение к стандартным константам, значение типизированной константы может быть задано выражением базового адреса. Пример объявления типизированных констант Type Point = Record
X, Y: Real
End;
Const Minimum: Integer = 0;
Maximum: Integer = 9999;
Factorial: Array [1..7] Of Integer = (1, 2, 6, 24, 120, 720, 5040);
HexDigits: Set Of Char = ['0'..'9', 'A'..'Z', 'a'..'z'];
Origin: Point = (X: 0.0; Y: 0.0);

 

Объектовый тип. Основные понятия.

Объектовый тип в паскале похож на комбинированный тип (класс).

type

point=object

x, y: integer;

visible: Boolean;

...

Объектовый тип может содержать подпрограммы. Подпрограммы, которые описаны в объектовом типе(классе) – это методы этого типа(класса). При описании класса задаётся описание полей, а потом описание методов:

type point=object

x.y: integer;

visible: Boolean;

procedure create(a, b: integer);

procedure switchon;

procedure switchoff;

procedure move(dx, dy: integer);

function getx: integer;

function gety: integer;

end;

 

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

Конструкторы и деструкторы.

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

constructor tLine.Init;
begin
NewEl(nil, nil)
end;

Последним методом, который обрабатывается должен быть деструктор.

destructor …

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

Скрытые поля и методы.

type

TGraphObj = object

Private {поля объекта будут скрыты от пользователя}

X, Y: Integer;

...

Public

...

end;

Директива Private в описании объекта открывает секцию описания скрытых полей и методов. Перечисленные в этой секции элементы объекта “не видны” программисту, если этот объект он получил в рамках библиотечного TPU-модуля. Скрываются обычно те поля и методы, к которым программист (в его же интересах! ) не должен иметь непосредственного доступа. В данном

примере он не может произвольно менять координаты реперной точки (X, Y), т.к. это не приведёт к перемещению объекта. Для изменения полей X и Y предусмотрены входящие в состав объекта методы Init и MoveTo. Скрытые

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

Классификация типов данных.

1.Простые

-Скалярные (стандартные)

*Integer, Расширения целого типа, Real, Boolean, Char

-Скалярные (Определяемые пользователем)

*Перечислительный тип, Ограничительный тип

2.Структурные

*Регулярный массив, Комбинированный массив, Множественный тип, Файловый тип, Строковый тип.

3.Ссылочный тип

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

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

Перечисляемый тип Traffic_Light (СВЕТОФОР) объединяет скалярные значения RED, YELLOW, GREEN Перечисляемый тип описывается в разделе описания типов, который начинается со служебного слова type, например:

Typesuit = (club, diamond, heart, spade);

 

 


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

Отрезок любого скалярного типа кроме real может быть определён на ограниченный тип.

конст.. конст

Тип, на котором строится отрезок, наывается базовым типом.

Чаще всего ограничительный тип используется для определения массива.

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

Например,

Var a: 1..25; ch: 'a'..'z';

Переменная ограниченного типа сохраняет все свойства переменных базового типа.

Для чего вводится ограниченный тип данных? Использование ограниченного типа делает программу наиболее понятной и наглядной. Например, если в программе переменная b может принимать только значения 3, 4, 5, 6, 7, 8, то лучше описать её следующим образом: Var b: 3..8;, чем Var b: Integer; так как в случае выхода значения b за диапазон 3..8 в первом случае будет выдано диагностическое сообщение, которое поможет найти ошибку. Во втором случае будет получен неправильный результат, что затруднит поиск ошибки. Таким образом, второй вариант описания переменной следует использовать в тех случаях, когда диапазон значений заранее неизвестен либо занимает весь допустимый интервал значений для рассматриваемого типа.

 


Регулярные типы данных

Регулярные типы, или массивы, описывают ограниченную совокупность однотипных переменных с прямым методом доступа. Переменные, составляющие массив, называются его компонентами. Тип компонент называется базовым для данного регулярного типа. Каждая компонента имеет один или несколько индексов, по которым можно вычислить её адрес в ОЗУ, что обеспечивает прямой доступ. Компонента массива может быть любой.

Синтаксическая диаграмма:

 


Тип, стоящий после слова of, является базовым и он может быть любым типом. Тип внутри квадратных скобок – тип индексов, которые могут быть любыми скалярными типами, кроме integer и real.

Type

T = array[1..5] of real;

Var

M2: array[1..5] of real;

M3, M1: T;

Begin

M2[1]: =2.5; M2[k]: =5.2;

End;

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

Type

Sezon=(zima, vesna, leto, osen);

Var

M4: array[sezon] of integer;

M5: array[char] of integer;

Begin

M4[vesna]: =5;

M5['a']: =7;

End;

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

Многомерные массивы.

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

Type

Matrix=array [1..20, 1..10] of Real;

Var

X, Y: Matrix;

Z: array [1..10, 1..10] of Integer;

Массивы X и Y имеют двадцать строк и десять столбцов. Массив Z представляет собой квадратную матрицу размером 10X10.

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

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

Например, array[boolean] of array[1..100] of array[Size] of Real интерпретируется компилятором точно так же, как массив: array[boolean, 1..10, Size] of Real.

Множественные типы данных.

Множество в языке Турбо Паскаль – это ограниченный набор различных элементов одного типа. Базовый тип – это совокупность значений, из которых могут быть образованы множества. Значение переменной множественного типа может содержать любое количество различных элементов базового типа. Иными словами, возможными значениями переменных множественного типа являются все подмножества значений базового типа. Вещественный тип данных не используется в качестве базового (нет отношения порядка, нельзя ввести ограничения на тип).

Описание

множественный тип

Изображение множества

Файловые типы данных.

Тип-файл представляет собой последовательность компонент одного типа, расположенных на внешнем устройстве (например, на диске). Элементы могут быть любого типа, за исключением самого типа-файла. Число элементов в файле при описании не объявляется. Работа с физическими файлами происходит через так называемые файловые переменные.

Для задания типа-файла следует использовать зарезервированные слова File и Of, после чего указать тип компонент файла.

Пример:

Type

N = File Of Integer; {Тип-файл целых чисел}

C = File Of Char; {Тип-файл символов}

Есть заранее определенный в Паскале тип файла с именем Text. Файлы этого типа называют текстовыми.

Введя файловый тип, можно определить и переменные файлового типа:

Var

F1: N;

F2: C;

F3: Text;

Файловые переменные имеют специфическое применение. Над ними нельзя выполнять никаких операций (присваивать значение, сравнивать и т.д.). Их можно использовать лишь для выполнения операций с файлами.

Перед тем, как осуществлять ввод-вывод, файловая переменная должна быть связана с конкретным внешним файлом при помощи процедуры Assign.

Формат:

Assign(< Имя файловой переменной>, < Имя файла> );

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

После этого файл должен быть открыт одной из процедур:

Reset(< Имя файловой переменной> );

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

Rewrite(< Имя файловой переменной> );

Открывается новый пустой файл для записи, ему присваивается имя, заданное процедурой Assign. Если файл с таким именем уже существует, то он уничтожается.

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

Close(< Имя файловой переменной> );

Это требование обязательно должно соблюдаться для файла, в который производилась запись.

 
 

 


Текстовые файлы.

Для текстовых файлов используются также операторы Readln и Writeln с соответствующими дополнениями, относящимися к файловому вводу-выводу. Любопытно, что вывод данных на монитор и ввод с клавиатуры в языке Паскаль тоже являются действиями с файлами. Они даже имеют свои предопределенные файловые переменные текстового типа: Output и Input соответственно. Переменная Output всегда открыта для записи, Input - для чтения. Если не указывать файловые переменные в операторах ввода-вывода (придем к формату, рассмотренному в теме " Операторы ввода-вывода" ), то в случае записи по умолчанию выбирается файл Output, в случае чтения - Input.
Как вы знаете, любой файл конечен и продолжать чтение из него информации можно лишь до определенного предела. Проверить, окончен ли файл, можно вызовом стандартной логической функции Eof (< Имя файловой переменной> )
Она вырабатывает значение True, если файл окончен, и False - в противном случае.

Процедуры и функции.

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

Процедура и функция - это именованная последовательность описаний и операторов. При использовании процедур или функций ПАСКАЛЬ - программа должна содержать текст процедуры или функции и обращение к процедуре или функции. Тексты процедур и функций помещаются в раздел описаний процедур и функций.

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

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

Сортировка выбором

И начнём мы с сортировки выбором. Хотя этот алгоритм и не является самым быстрым, но я решил начать с него потому что, на мой взгляд он наиболее прост для понимания. Суть алгоритма состоит в том, что бы в исходном массиве найти наименьший элемент, а затем поменять местами первый элемент в списке с найденным. После того, находиться наименьший их оставшихся и меняется со вторым элементом. И так до тех пор пока весь список не будет отсортирован.
Таким образом понадобиться N+(N-1)+(N-2)+...+1 или N*N проходов чтобы отсортировать список.

procedure SellectionSort( var a: array of integer; min,
max: Integer);
var
i, j, best_value, best_j: longint;
begin
for i: =min to max do begin
best_value: =a[i];
best_j: =i;
for j: =i+1 to max do begin
if a[j]< best_value then begin
best_value: =a[j];
best_j: =j;
end;
end;
a[best_j]: =a[i];
a[i]: =best_value;
end;
end;

 

48. Сортировка методом " пузырька".

for i: =1 to k-1 do
for j: =1 to k-i do
if mas[j]> mas[j+1] then
begin
a: =mas[j];
mas[j]: =mas[j+1];
mas[j+1]: =a;
end;

Структура программы.

I Раздел заголовка ;

1. Заголовок программы имеет вид:

program (имя программы);

Например: program First;

II Раздел описаний ;

2. Список используемых библиотек:

uses (список библиотек);

Например: uses CRT;

3. Раздел описания меток:

label (список меток)

Например: Label Home, 4;

4. Раздел описания констант:

const (имя константы)=(значение константы)

Например: cons n=7;

5. Раздел описания типов:

type (имя типа)=(описание типа);

Например: type mass= array [1..3, 1..5] of real;

6. Раздел описания переменных:

var (имя переменной): (тип переменной)

Например: var х: real ;

7. Раздел описания процедур и функций.

III Раздел исполняемых операторов (тело программы).

8. Тело программы:

begin

(команды программы)

end .

Тип Integer.

Значениями этого типа являются целые числа из некоторого интервала. Каков этот интервал зависит от реализации (компьютера и транслятора), однако тип integer всегда обозначает лишь все такие целые числа n, что min(integer) max(integer).
Для чисел, являющихся константами целого типа, используется обычная десятичная форма записи. Например, 5 изображает число " пять", а 15 изображает число " пятнадцать". Если константа специфицирована с суффиксом H, представление является шестнадцатеричным, например, H13 изображает число " восемьнадцать".Для целых чисел определены и доступны всем известные операции: + (сложение), - (вычитание), * (умножение), / (деление с вещественным результатом).Каждая из бинарных операций отношения: = (равно), # (неравно), < = (меньше или равно), < (строго меньше), > (строго больше), > = (больше или равно) определена для значений целого типа и вырабатывает значение логического типа. Для целочисленных аргументов определены следующие стандартные функции с целочисленными результатами: abs -- абсолютное значение аргумента, pred - предыдущее по величине целое число, succ - следующее по величине целое число (например, abs(-3) = 3, pred(3) = 2, succ(3) = 4). Стандартная функция odd проверяет нечетность заданного целого числа; она выдает значение true, если аргумент нечетен, и значение false, если аргумент четен.

 

Тип Real.

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

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

Для записи очень больших или, наоборот, очень маленьких чисел удобно использовать форму записи вещественного числа " с плавающей запятой". В этой форме число представляется в виде произведения двух сомножителей: мантиссы (целого или дробного числа) и числа 10, которое возведено в целую степень, называемую порядком изображаемого числа. Так, число 2 500 000 можно записать, например, как произведение 2, 5 и . Изображается вещественное число в форме с плавающей запятой следующим образом: сначала выписывается (по обычным правилам) мантисса, за которой следует буква (читается -- умножить на 10 в степени) и показатель степени. Например, 2.56 изображает число 2 500 000, а 3.2-7 -- изображение числа 0.00000032; каждое из них содержит по две значащих цифры.

Таким образом, каждое значение типа real представляет целый отрезок оси вещественных чисел, причем плотность точек на оси вещественных чисел, являющихся значениями вещественного типа real, экпоненциально уменьшается с увеличением |x|. Например, интервал от 1/2 до 1 содержит столько же элементов из real, что и интервал от до .

Для вещественных значений определены операции: - (обращение знака) и + (тождественная операция), а также бинарные операции: + (сложение), - (вычитание), * (умножение) и / (деление).

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

Тип Boolean

Тип Char

Для обозначения константы литерного типа литеру заключают в апострофы.

Например, 'A', '+', '5', '', '? ', ''''.

Натуральное число, сопоставленное литере, служит кодом для внутреннего представления литеры в ВМ, его возвращает стандартная функция integer. Например, в силу свойств литерного типа имеем integer('Z')=integer('A')+25 и integer('9')=integer('0')+9. Имеется также стандартная функция chr, которая вычисляет литеру по ее коду и является обратной по отношению к функции integer, т.е. chr(integer(X))=X для любого литерного значения X и integer(chr(N))=N для любого целого числа N, для которого chr(N) определено.

Поскольку в типе char литеры упорядочены, для них определены бинарные операции отношения: = (равно), < (предшествует), < = (предшествует или равно), > (следует), > = (следует или равно), < > (неравно), каждая из которых вырабатывает логическое значение.

Процедуры ввода-вывода.

Процедуры ввода/вывода относятся к стандартным или встроенным процедурам Turbo Pascal. Стандартная процедура не нуждается в предварительном описании, она доступна любой программе, в которой содержится обращение к ней.

input – файл ввода прявязанный к клавиатуре.

output – файл вывода для дисплея.

.txt – файл состоит из символов.

Для вывода информиции на дисплей

write(a1, a2, …, an);

writeln(a1, a2, …, an);

writeln; - перевод строки (два символа).

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

Для ввода данных:

read(a, b, …, c); - Аналогичен READLN, но «лишние» данные не отбрасываются, а становятся доступными для следующих операторов READ, позволяя производить в программе «потоковый» ввод данных.

readln(a, b, …, c); - Последовательность и тип вводимых данных должны соответствовать последовательности и типу переменных, указанных в операторе. «Лишние» данные отбрасываются.

Оператор присваивания.

Имя: =Выражение;

Имя в левой части – имя переменной, имя типизированной константы или имя функции.

Тип имени левой и правой частей должны совпадать.

Тип выражения зависит от операторов и операций.

Выполнение инструкций присваивания заключается в следующем:

вычисляется результат выражения, находящегося справа от символа ": =";

значение записывается в переменную, имя которой стоит слева от символа ": =";

Условный оператор If.

Условный оператор позволяет проверить некоторое условие и в зависимости от результатов проверки выполнить то ил иное действие.

Структура условного оператора:

If < условие> Then < оператор1> Else < оператор2>

Где < условие> - произвольное выражение логического типа;

< оператор1>, < оператор2> - любые операторы языка Турбо Паскаль.

Условный оператор работает по следующему алгоритму. Вначале вычисляется условное выражение < условие>. Если результат есть TRUE, товыполняется < оператор1>, а < оператор2> пропускается; если результат есть FALSE, наоборот, < оператор1> пропускается, а выполняется < оператор2>. Например:

Var

X, y, max: integer;

Begin

……

if x > max then

y: = max

else y: =x;

При выполнении этого фрагмента переменная У получит значение переменной Х, если только это значение не превышает МАХ, в противном случае У станет = Мах

Оператор выбора CASE.

Оператор выбора позволяет выбрать одно из нескольких возможных продолжении программы. Параметр по которому осуществляется выбор, служит ключ выбора – выражение любого порядкового типа (Real, String.)

Структура оператора:

CASE < ключ_выбора> OF < список_выбора> {Else < операторы> } END

Где CASE переводится как случай.

< ключ_выбора> - ключ выбора, < список_выбора> - одна или более конструкций вида: < костанта выбора>: < оператор>;

< костанта _выбора> - константа того же типа, что и выражение < ключ_выбора>.


Поделиться:



Последнее изменение этой страницы: 2017-03-14; Просмотров: 769; Нарушение авторского права страницы


lektsia.com 2007 - 2024 год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! (0.174 с.)
Главная | Случайная страница | Обратная связь