Простые типы. Простые типы Общая характеристика реляционной модели данных

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

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

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

§ регулярный тип (массивы);

§ комбинированный тип (записи);

§ файловый тип (файлы);

§ множественный тип (множества);

§ строковый тип (строки);

§ в языке Турбо Паскаль версии 6.0 и старше введен объектный тип (объекты).


26)Оператор goto - это оператор безусловного перехода. Он применяется в том случае, когда после выполнения некоторого оператора нужно перейти не к следующему за ним оператору, а в какую-то другую часть программы, помеченную специальной меткой. Эта метка обязательно должна быть объявлена в разделе описания меток данной программы. Метка может быть как числовой, например: goto 12, так и содержать буквенные символы, например: goto raschets.

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

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

goto Metka; (Переход в конец блока)

Metka: (Пустой оператор помечен меткой)

ввод - Read(<список_ввода>) и ReadLn(<список_ввода>).

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

Список ввода - это последовательность имён переменных, разделённых запятыми. Например, при помощи команды

ReadLn(k, x, c, s); {k: Byte; x: Real; c: Char; s: String}

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

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

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

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

WriteLn("Согласны ли Вы с этим утверждением? y - да, n - нет");

ReadLn(c); {c: Char}

else WriteLn("Ошибка!");

until (c = "n") or (c = "y");

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

Вывод - Для того, чтобы вывести на экран какое-либо сообщение, используют процедуру Write(<список_вывода>) или WriteLn(<список_вывода>).

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

Формат - Если для вывода информации воспользоваться командой, приведённой в конце предыдущего пункта, то выводимые символы окажутся «слепленными». Чтобы этого не случилось, нужно либо позаботиться о пробелах между выводимыми переменными:

WriteLn(a, " ", b, " ", c);

либо задать для всех (или хотя бы для некоторых) переменных формат вывода:

WriteLn(a: 5, b, c: 20: 5);

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

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

Например, если a = 25, b = "x", а c = 10.5, то после выполнения команды WriteLn(a: 5, " ", b, c: 10: 5) на экране или в файле будет записано следующее (подчерки в данном случае служат лишь для визуализации пробелов):

25_x_ _10.50000

Особенно важен формат при выводе вещественных переменных. К примеру, если не указать формат, то число 10.5 будет выведено как 1.0500000000Е+0001. Такой формат называется записью с плавающей точкой.

Если же задать только общую длину вещественного числа, не указывая длину дробной части, то оно будет занимать на экране заданное количество символов (в случае надобности, спереди будет добавлено соответствующее количество пробелов), но при этом останется в формате плавающей точки. Минимальной длиной для вывода вещественных чисел является 10 (при формате _x.xE+yyyy). Первая позиция зарезервирована под знак «-».

27) A лгоритм линейной структуры (линейный алгоритм) – алгоритм, в котором блоки выполняются последовательно друг за другом. Такой порядок выполнения блоков называется естественным .

Пример. Вычислить

Решение : Схема алгоритма линейной структуры имеет вид (рис.1.)

28)Простой и составной операторы

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

Два последовательных оператора обязательно должны разделяться точкой с запятой “;”.

Примеры простых операторов:

a:= 10; b:= a*5; Write(a, b);

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

Составной оператор – это последовательность операторов, перед которой стоит слово BEGIN, а после – END. Слова BEGIN и END часто именую операторными скобками.

Пример составного оператора:

BEGIN
a:= 10;
b:+ a*5;
Write(a, b)
END ;

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

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


30. цикл с постусловием: Циклы применяются, когда нужно выполнить одни и те же команды несколько раз.

Рассмотрим общий вид цикла с постусловием:

[тело цикла];

Until < логическое выражение>;

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

Стоит правильно понимать суть этого цикла: «Повторять команды, приведенные в теле цикла до тех пор, пока данное условие не будет выполнено (логическое выражение не будет истинным)».

цикл с предусловием: Циклы применяются, когда нужно выполнить одни и те же команды несколько раз.

Рассмотрим общий вид цикла с предусловием:

While <логическое выражение> do [оператор][;]

[тело цикла];

Главными плюсами данного цикла являются:

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

2. В данном цикле можно реализовать повторение команд до определенного условия – до логического выражения .

Стоит правильно понимать суть этого цикла: «Пока данное условие выполняется (или логическое выражение не ложь) повторяем команды, написанные в теле цикла, иначе завершаем цикл».

Через цикл с предусловием можно реализовать цикл с параметром, за одним «но» – на практике лучше использовать «for».


Похожая информация.


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

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

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

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

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

К порядковым типам относятся (см. рис. 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 полностью совместимы с любыми другими вещественными типами: над ними определены все вещественные операции, они могут использоваться как аргументы математических функций и т. д. Наиболее подходящей областью применения этих типов являются бухгалтерские расчеты.

Наименование параметра Значение
Тема статьи: Структурированные типы данных
Рубрика (тематическая категория) Программирование

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

o Строки;

o Массивы;

o Множества;

o Записи;

o Файлы;

o Классы.

Строки (строковые типы) : представлены тремя физическими и одним общим типами.

Данные типа ShortString представляют из себястроку, которая фактически является массивом из 256 элементов – array . Нулевой байт этого массива указывает длину строки. Строка - ϶ᴛᴏ последовательность символов кодовой таблицы.

Данные типов AnsiString и Wide String представляют из себядинамичсекие массивы, максимальная длина которых фактически ограничена размером основной памяти компьютера. Данные типа AnsiString м кодируются в коде ANSI , а типа Wide String – в коде Unicode .

Общим является тип String , который может соответствовать типу ShortString илиAnsiString , что определяется директивой компилятора $H .

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

Формат описания строкового типа:

Type <имя типа> = string [ max длина строки];

Иначе: var <имя переменной, ... >: string [ max длина строки];

В случае если значение максимально допустимой длины строки не указано, по умолчанию длина 255 символов. При использовании в выражениях строка состоит в апострофы. Строковые данные можно использовать в качестве констант. Недопустимо использование строковых переменных в качестве селœектора в операторе Case .

Пример: const Adres = ’ul. Korolenco, 5’;

type Stroka = string;

var Str: Stroka; St1: string; St2, St3: string;

Массивы : массив - ϶ᴛᴏ упорядоченная индексированная совокупность однотипных элементов, имеющих общее имя. Элементами массивов бывают данные любого типа, включая структурные. Каждый элемент массива однозначно определяется именем массива и индексом (номером этого элемента в массиве) или индексами, в случае если массив многомерный. Для обращения к отдельному элементу массива указывают имя этого массива и номер (номера) элемента͵ заключенный в квадратные скобки, к примеру, arr1 или arr2.

Количество индексных позиций определяет размерность массив (одномерный, двумерный и т.д.), при этом размерность массива не ограничивается. В математике аналогом одномерного массива является вектор, а двумерного массива – матрица. Индексы элементов массива должны принадлежать порядковому типу.

Различают массивы статические и динамические . Статический массив представляет собой массив, границы индексов и, соответственно, размеры которого задаются при объявлении, ᴛ.ᴇ. они известны до компиляции программы. Формат описания типа статического массива:

Type <имя типа> = Аггау [<тип индексов>] of <тип элементов >;

Иначе: var <имя переменной, ...>: Аггау [<тип индексов>] of <тип элементов >;

Пример.
Размещено на реф.рф
type Matrix = a ггау of integer;

Znak = array of char;

Day =(Mon, Tue, Wed, Thu, Fri, Sat, Sun);

var m1, m2: Matrix; a: Znak;

Week: array of Day; r: array of real;

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

Type <имя типа> = Аггау of <тип элементов >;

Задание размера динамического массива во время выполнения программы производится процедурой SetLength (var S; NewLength:integer ), которая для динамического массива S устанавливает новый размер, равный NewLength . Выполнять операции с динамическим массивом и его элементами можно только после задания размеров этого массива.

После задания размера динамического массива для определœения его длины, минимального и максимального номеров элементов используются функции Length(), Low() и High() соответственно. Нумерация элементов динамиче­ского массива начинается с нуля, в связи с этим функция Low() для него всœегда возвращает значение ноль.

Пример.
Размещено на реф.рф
Var n: integer;

m: array of real;

SetLength(m, 100);

for n:=0 to 99 do m[n]:=n;

SetLength (m , 200);

После описания динамического массива, состоящего из вещественных чи­сел, определяется размер этого массива, равный 100 элементам. Каждому элементу присваивается значение, равное его номеру в массиве. Так как ну­мерация элементов массива начинается с нуля, то номер последнего из них равен не 100, а 99. После цикла размер массива увеличивается до двухсот.

Для описания типа многомерного динамического массива (к примеру, дву­мерного) используется конструкция:

Type <имя типа> = Аггау of Аггау of <тип элементов >;

Действия над массивом обычно выполняются поэлементно, в т.ч. операции ввода и вывода. Поэлементная обработка массивов производится, как правило, с использованием циклов. Массив в целом (как единый объ­ект) может участвовать только в операциях отношения и в операторе при­сваивания, при этом массивы должны быть полностью идентичными по структуре, то есть иметь индексы одинаковых типов и элементы одинаковых типов.

Множества: множество представляет собой совокупность элементов, выбранных из пред­определœенного набора значений. Все элементы множества имеют порядко­вый тип; количество элементов множества не может превышать 256. Формат, описания множественного типа:

Type <имя типа> = Set of <тип элементов >;

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

Вместе с тем, имеется операция in (проверка членства), которая определяет принадлежность выражения порядкового типа (первого операнда) множест­ву (второму операнду). Результат операции будет типа boolean и иметь зна­чение True в случае соблюдения принадлежности значения множеству.

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

Type <имя типа> = record ;

<имя поля­_1>: <Тип поля>;

<имя поля_ n >: <Тип поля>;

Вариантная запись , так же как и фиксированная, имеет конечное число по­лей, однако предоставляет возможность по-разному интерпретировать об­ласти памяти, занимаемые полями. Все варианты записи располагаются в одном месте памяти и позволяют обращаться к ним по различным именам. Отметим, что термин ʼʼвариантная записьʼʼ не имеет ничего общего с терми­ном ʼʼвариантный типʼʼ (variant ). Формат объявления вариантной записи:

Type <имя типа> = record ;

Case <Признак>: <Тип признака> of ;

<вариант_1>: (<описание варианта_1>)

<вариант_ n >: (<описание варианта_ n >);

Для обращения к конкретному полю крайне важно указывать имя записи и имя поля, разделœенные точкой. Τᴀᴋᴎᴍ ᴏϬᴩᴀᴈᴏᴍ, имя поля является состав­ным. С полем можно выполнять те же операции, что и с переменной этого типа.

Пример.
Размещено на реф.рф
var Man: record;

Man.Name:=’Ivanov M.A.’;

Man .Salary:=5000;

Переменная Man - фиксированная запись, которая содержит поля имени (Name), оклада (Salary) и примечания (Note), причем каждое поле имеет свой тип.

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

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

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

Пример.
Размещено на реф.рф
var f1: TextFile;

f2: File of integer;

f3: File of real;

здесь переменная f1 предназначена для работы с тек­стовыми файлами, переменные f2 и f3 – с типизированными файлами, со­держащими целые и вещественные числа, соответственно, а переменная f4 – с нетипизированными файлами.

Структурированные типы данных - понятие и виды. Классификация и особенности категории "Структурированные типы данных" 2017, 2018.

алгоритм дискретный программирование

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

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

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

Объем памяти для каждого типа определяется таким образом, чтобы в него можно было поместить любое значение из допустимого диапазона значений данного типа. Например, тип «байт» может принимать значения от 0 до 255, что в двоичном коде (255 = = 11111111 2) соответствует ячейке памяти длиной в 8 бит (или 1 байт).

В описанных выше алгоритмах все данные хранятся в виде переменных. Например, инструкция «Ввод двух чисел а, означает введение пользователем значений двух переменных, а инструкция «К=К+1» означает увеличение значения переменной К на единицу.

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

Все остальные данные в программе, значения которых не изменяются на протяжении ее работы, называют константами или постоянными. Константы, как и переменные, имеют тип. Их можно указывать явно, например, в инструкции «К = К + 1» 1 есть константа, или для удобства обозначать идентификаторами: pi = 3,1415926536. Только значение pi нельзя изменить, так как это константа, а не переменная.

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

Массивом называется упорядоченная совокупность однотипных величин, имеющих общее имя, элементы которой адресуются (различаются) порядковыми номерами (индексами). В качестве иллюстрации можно представить шкаф, содержащий множество пронумерованных ящиков (совокупность - «Ящик №1», «Ящик №2», «Ящик №3» и т.д.; «Ящик» - общее имя всех ее элементов). Доступ к содержимому конкретного ящика (элементу массива) осуществляется после выбора ящика по его номеру (индексу). Элементы массива в памяти компьютера хранятся по соседству, одиночные элементы простого типа такого расположения данных в памяти не предполагают. Массивы различаются количеством индексов, определяющих их элементы.

Одномерный массив (шкаф ящиков в один ряд) предполагает наличие у каждого элемента только одного индекса. Примерами одномерных массивов служат арифметическая и геометрическая последовательности, определяющие конечные ряды чисел. Количество элементов массива называют размерностью. При определении одномерного массива его размерность записывается в круглых скобках, рядом с его именем. Например, если сказано: «задан массив А(10)», это означает, что даны элементы: а р а 2 ,…, a ig . Рассмотрим алгоритмы обработки элементов одномерных массивов.

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

2024 printflip.ru. Компьютерные истории.