9 Июнь 2008

10. Описание данных. Типы данных в языке Паскаль.

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

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

Порядковые типы отличаются тем, что каждый из них имеет конечное количество

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

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

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

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

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

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

Логические типы. В стандартном языке Паскаль определен тип Boolean. Значениями логического типа может быть одна из предварительно объявленных констант False (ложь) или True (истина). Для них справедливы правила:

Ord (False) = 0

Ord (True) <> 0

Succ (False) = True

Pred (True) = False

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

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

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

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

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

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

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

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

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

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

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

Вещественное число занимает от 4 до 10 смежных байтов и имеет следующую структуру в памяти компьютера:

s

e

m

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

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

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

Вопрос 9. Операторы цикла (for, while, repeat … until).

написано в рубрике: Алгоритмизация (Т) — Метки: , , , , , — Михаил @ 19:21

Три различных оператора, с помощью которых можно запрограммировать повторяющиеся фрагменты программ:

Счетный оператор цикла for имеет такую структуру:

for <параметр_цикла> := <нач_знач> to <кон_знач>

do <оператор>;

Здесь for, to, do – зарезервированные слова (для, до, выполнить); <параметр_цикла> - переменная типа Integer (точнее, любого порядкового типа_);<нач_знач> - начальное значение (выражение того же типа_);<кон_знач> - конечное значение (выражение того же типа); <оператор> - произвольный оператор.

При выполнении оператора for вначале вычисляется выражение <нач_знач> и осуществляется присваивание <параметр_цикла>:= <нач_знач>. После этого циклически повторяется следующая последовательность действий.

  1. Проверка условия <параметр_цикла> <кон_знач>; если условие не выполнено, оператор for завершает свою работу.
  2. Выполнение оператора <оператор>.
  3. Наращивание переменной <параметр_цикла> на единицу.

Оператор цикла while с предварительной проверкой условия:

while <условие> do <оператор>;

Здесь while, do – зарезервированные слова (пока [выполняется условие], делать); <условие> - выражение логического типа; <оператор> - произвольный оператор.

Если выражение <условие> имеет значение True, то выполняется <оператор>, после чего вычисление выражения <условие> и его проверка повторяются. Если <условие> имеет значение False, оператор while прекращает свою работу.

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

Оператор цикла repeat..until с последующей проверкой условия:

repeat <тело_цикла> until <условие>;

Здесь repeat и until – зарезервированные слова (повторять [до тех пор], пока [не будет выполнено условие]); <тело_цикла> - произвольная последовательность операторов; <условие> - выражение логического типа.

Операторы <тело_цикла> выполняются хотя бы один раз, после чего вычисляется выражение <условие>: если его значение есть False, операторы <тело_цикла> повторяются, в противном случае оператор repeat..until завершает свою работу.

Пара слов repeat..until подобна операторным скобкам begin и end, поэтому перед until ставить точку с запятой не обязательно.

Для правильного выхода из цикла условие выхода должно меняться внутри оператора, составляющих тело цикла while или repeat..until.

Вопрос 7 . Алгоритмы: определение, свойства, способы представления.

Алгоритм – это последовательность действий приводящая конкретному результату за конечное число шагов.

Способы представления:

Словесное описание;

Табличное (в виде таблице);

Аналитическое (формулой);

Графическое (блок схема алгоритма).

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

- определенность - однозначная определенность результатов выполнения каждого шага алгоритма;

- конечность - однозначная определенность результатов выполнения каждого шага алгоритма за конечное время;

- результативность - получение конечного результата за конечное время;

- массовость - возможность использования алгоритма для некоторого класса исходных данных;

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

Кроме переменных в алгоритмах используются массивы переменных - наиболее широко известная структура данных. Массив - область памяти, где могут размещаться совокупности данных определенного типа (целого, вещественного и т.д.). Все компоненты массива имеют одинаковый тип и являются одинаково доступными. Для обращения к отдельной компоненте используется имя массива с индексом, определяющим ее местоположение в массиве. Таким образом, массив характеризуется фиксированным именем, фиксированным типом и фиксированной размерностью. Например, последовательность чисел -1, 25, 13, 18, 8 можно рассматривать как массив целого типа с именем Vector, который содержит 5 элементов. К любому элементу этого массива можно обратиться следующим образом:

Vector[1], где I может принимать значения в диапазоне от 1 до 5. Vector[2] = 25;

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

- графический способ (схемы алгоритмов, диаграммы Насси - Шнейдермана );

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

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

Вопрос 8. Основные понятия объектно-ориентированного программирования: объекты, классы, инкапсуляция, полиморфизм, наследование, методы.

Основные понятия

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

Инкапсуляция

Класс представляет собой единство трех сущностей – полей, методов и свойств. Объединение этих сущностей в единое целое и называется инкапсуляцией. Инкапсуляция позволяет во многом изолировать класс от остальных частей программы, сделать его «самодостаточным» для решения конкретных задач. В результате класс всегда несет в себя некоторую функциональность. Например, класс TForm содержит (инкапсулирует в себе) все необходимое для создания окна Windows-программы, класс Tmemo представляет собой полнофункциональный многострочный текстовый редактор, класс TTimer обеспечивает работу программы с таймером и т.д.

Инкапсуляция является мощным средством обмена готовыми к работе программами заготовками.

Наследование

Любой класс может быть порожден от другого класса. Для этого при его объявлении указывается имя класса родителя: TChildClass = class (TParentClass)

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

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

TaClass = class (TObject)

TaClass = class

Принцип наследования приводит к созданию ветвящегося дерева классов, постепенно разрастающегося при перемещение от класса Tobject к его потомкам. Каждый потомок дополняет возможности своего родителя новыми и передает их своим потомкам.

Полиморфизм

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

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

Вопрос 6. Типизированные файлы. Использование типа Record.

Под файлом понимают именованная область внешней памяти компьютера (HDD, дискета и т.д.).

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

Файловый тип можно задать одним из трех способов:

<имя> = File of <тип>;

<имя> = TextFile;

<имя> = File;

Здесь <имя> - имя файлового типа, File of - зарезервированные слова (файл, из); TextFile – имя стандартного типа текстовых файлов; <тип> - любой тип Delphi, кроме файлов.

Например:

Type

Product = record

Name: Satring;

Code: Word;

Cost: Comp

End;

F: File of Product;

В зависимости от способа объявления можно выделить три вида файлов:

1. Типизированные (Задаются предложением File of…)

2. Текстовые файлы ( определяются типом TextFile);

3. Нетипизированные файлы (определяются типом File)

Доступ к файлам

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

Файловая переменная связывается с именем файла в результате обращения к стандартной процедуре AssignFile:

AssignFile (<ф.п.>, <имя файла>);

Здесь <ф.п.> - файловая переменная (правильный идентификатор, объявленный в программе как перемена файлового типа); <имя файла> - текстовое выражение, содержащие имя файла и, если необходимо, путь к ниму.

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

Reset (<ф.п.>); Здесь <ф.п.> - файловая переменная связанная раннее процедурой AssignFile с уже существующим файлом. При выполнение этой процедуры дисковый файл подготавливается к чтению информации. В результате специальная переменная-указатель, связанная с этим файлом, будет указывать на начало файла, то есть на компонент с порядковым номером 0.

Следующая процедура инициирует запись информации в файл, связанный с файловой переменной <ф.п.>: Rewrite (<ф.п.>);

Следующая процедура инициирует запись в ранние существующий текстовый файл для его расширения, при этом указатель файла устанавливается в его конец: Append (<o.i.>).

Процедура Append применима только к текстовым файлам.

< 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 >

© Проект «Студенты-Программеры»., 2008. Все права защищены.
Перепечатка материалов только при наличии активной ссылки на источник.
Powered by WordPress