Программирование - Электронные Образовательные Ресурсы

advertisement
Билет №1
ОБЩАЯ ХАРАКТЕРИСТИКА ЯЗЫКОВ ПРОГРАММИРОВАНИЯ
Язык программирования – формализованный язык для описания алгоритма решения
задачи на компьютере.
Характеристики и свойства языков программирования
Основными характеристиками, позволяющими сравнивать языки программирования
и выбирать наилучшие для решения той или иной задачи, являются мощность, уровень и
концептуальная целостность.
Мощность языка характеризуется количеством и разнообразием задач, алгоритмы
решения которых можно записать, используя данный язык.
Уровень языка характеризуется сложностью решения задач с помощью этого языка.
Чем проще записывается решение задач, чем более непосредственно реализуются
сложные операции и понятия, чем меньше объем получаемых программ, тем выше
уровень языка.
Концептуальная целостность языка характеризуется свойствами совокупности
понятий, служащих для описания этого языка, и включает три взаимосвязанных аспекта:
экономию, ортогональность, единообразие понятий. Экономия понятий предполагает
достижение максимальной мощности языка с помощью минимального числа понятий.
Ортогональность понятий означает, что между понятиями не должно быть взаимного
влияния. Так, если какое-либо понятие используется в различных контекстах, то правила
использования
должны быть одни и
те же.
Единообразие понятий
требует
согласованного, единого подхода к описанию и использованию всех понятий.
Обычно, чем меньше мощность языка, т.е. чем уже область его применения, тем
выше его уровень. По этой причине наряду с универсальными языками разрабатываются
и специализированные языки в некоторой конкретной области.
Перечисленные характеристики языков программирования определяют наличие или
отсутствие надежности, удобочитаемости, полноты, гибкости, простоты.
Надежность языка обеспечивает минимум ошибок при написании программ.
Удобочитаемость языка – это свойство, обеспечивающее легкость восприятия
программ человеком. Это зависит от широкого спектра факторов, включающего, с одной
стороны, выбор ключевых слов, а с другой – возможность структурирования программы.
1
Полнота языка обеспечивает описание на языке решения задач определенной
предметной области.
Гибкость языка обеспечивает легкость выражения на языке необходимых для
решения задач действий.
Простота языка характеризуется легкостью понимания семантики языковых
конструкций и запоминания их синтаксиса.
Пути развития и классификация языков программирования
В самом начале 60-х годов мир компьютерных языков казался очень простым. В
программировании господствовали три языка: Фортран, Кобол и Алгол-60. К концу 60-х
годов языки стали размножаться.
В 1969 году Джин Сэммит опубликовал книгу «Языки программирования.
Как следует из обзоров, в начале 70-х годов существовало не менее 450 языков
высокого.
Первый язык программирования высокого уровня Фортран создан в 1955 г. Он
включал самые элементарные средства, многие из которых отражали непосредственно
возможности ЭВМ того времени.
Первым действительно универсальным языком программирования был ПЛ/1 (1964
г.), объединивший многие возможности и средства предыдущих языков. Он
предоставляет практически все необходимые средства описания алгоритмов, хотя и не
столь развитые, как в современных языках, средства описания и обработки таких
сложных типов данных, как массивы и структуры, а также простых типов данных.
Параллельно с развитием универсальных языков создавались и специализированные
языки, у которых за счет сужения области их использования удавалось построить
отдельные высокоуровневые механизмы для описания и данных, и действий. Такими
языками являются Лисп (1960 г.), Пролог (1972 г.). Лисп был создан с целью
использования его в системах автоматического доказательства теорем. Поэтому он
называется также языком искусственного интеллекта.
Первым из значительных этапов в дальнейшем развитии средств описания данных
был язык Паскаль (1970 г.). Язык назван в честь французского математика 17 в. Блеза
Паскаля, а его автором был Николаус Вирт. Он начал писать Паскаль в 1968 г. Самым
главным в Паскале был принцип, согласно которому данные должны представляться в
программе в той абстрактной форме, с которой работает программа. Паскаль
2
предоставляет пользователю придумывать свои собственные типы данных на основе
богатого набора базовых форм. Паскаль также поощряет использование логической
структуры, которая делит программу на небольшие простые подзадачи. Структура
Паскаля делает программы легко читаемыми. Паскаль стал «путеводной звездой»
зарождавшегося в то время движения за структурное программирование, которое обрело
силу в конце 70-х годов.
Delphi
Классификация языков программирования
По степени приближения к аппаратной части компьютера языки программирования
можно разделить на языки низкого уровня и языки высокого уровня.
К языкам низкого уровня можно отнести:
 машинные языки – языки программирования, воспринимаемые аппаратной частью
компьютера (машинные коды);
 машинно-ориентированные языки – языки программирования, отражающие структуру
конкретного типа компьютера (ассемблеры).
Языки высокого уровня не зависят от архитектуры компьютера и могут быть
разделены
на
алгоритмические
и
неалгоритмические;
универсальные
и
специализированные; процедурные и непроцедурные; структурно-ориентированные,
объектно-ориентированные и дискриптивные.
Основные отличия языков высокого уровня от машинных языков состоят в
следующем:
- язык высокого уровня обладает гораздо большими выразительными возможностями,
т.е. его алфавит шире, что повышает наглядность текста программы;
- набор операций, допустимых для использования, не зависит от набора машинных
операций, а выбирается из соображений удобства формулирования алгоритмов решения
задач определенного класса;
- формат предложений достаточно гибок и удобен для использования, что позволяет с
помощью одного предложения задать содержательный этап обработки данных;
- требуемые операции задаются в удобном для человека виде, например, в виде
общепринятых математических обозначений;
3
- в языке может быть предусмотрен значительно более широкий набор типов данных по
сравнению с набором машинных типов данных.
Алгоритмический язык – язык, предназначенный для отражения структуры
алгоритма.
Универсальный язык – язык, предназначенный для решения широкого спектра задач,
поддерживающий работу с большим числом типов данных и разнообразные способы их
обработки.
Специализированный язык – язык, предназначенный для решения задач из
конкретной предметной области, использующий мощный аппарат специальных методов
обработки небольшого числа типов данных.
Процедурный язык – язык программирования, в котором для получения нужного
решения требуется записать в явном виде последовательность команд.
Непроцедурный язык – язык программирования, пользуясь которым программист
может описывать результат работы программы, не указывая, как его можно получить.
Структурно-ориентированный язык – язык программирования, поддерживающий
принципы структурного программирования, требующие разбиения программы на
небольшие независимые части.
Объектно-ориентированный язык – язык, создающий окружение в виде множества
независимых объектов, каждый из которых имеет свои свойства и способы
взаимодействия с другими объектами.
Дискриптивный язык – язык, скрывающий от программиста все процедуры решения
задачи. Программист строит базу данных, соответствующую проблеме, а затем ставит
вопросы, касающихся каких-либо фактов. Транслятор языка анализирует факты, пока не
получит решение, либо не установит, что для решения недостаточно информации.
Программа состоит из 2-х частей: база данных и цель. База данных содержит конкретные
факты и основные принципы соотношения между фактами. Цель – общее описание
решения.
Основные понятия языков программирования
Язык программирования – множество текстов (последовательностей символов)
некоторого алфавита, удовлетворяющих правилам синтаксиса и задающих порядок
вычислений в соответствии с правилами семантики.
4
Алфавит языка программирования – набор символов, включающий буквы, цифры и
специальные знаки. К специальным знакам относятся знаки арифметических операций,
знаки операций отношения, разделители, зарезервированные слова.
Синтаксис языка программирования – совокупность правил записи, которым
должна удовлетворять любая программа, включает также правила ввода текста
программы в ЭВМ. Таким образом, для каждой цепочки (последовательности) символов
синтаксис позволяет ответить на вопрос, является ли она текстом на данном языке или
нет. Например, запись текста на алгоритмическом языке представляет собой строго
линейную последовательность литер, т.е. не допускается использование верхних и
нижних индексов (записей типа x2 или ai,j), дробей и т.п.
Семантика языка программирования – правила, определяющие, какие операции и в
какой последовательности должна выполнить ЭВМ, работая по программе, т.е. правила
толкования синтаксических конструкций.
Объекты данных
Практически все современные универсальные ЭВМ базируются на архитектуре фон
Неймана, где двумя главными компонентами являются центральный процессор и память.
Память является линейно упорядоченной и состоит из массива адресуемых элементов
двоичных данных – слов. В памяти хранятся как программа, так и данные. Вид
информации, представляемой каждым словом данных в памяти, может быть различен.
Одни слова могут содержать целые числа, другие – символы. При программировании на
машинном уровне необходимо точно знать, как эти данные представлены в виде
последовательности битов и какие машинные команды должны применяться для
реализации требуемых операций. Язык высокого уровня дает программисту абстрактную
модель, в которой данные и операции над данными можно специфицировать в
проблемно-ориентированных, а не машинно-ориентированных терминах. Язык высокого
уровня обеспечивает следующие возможности доступа к объектам данных и их
обработки:
-ссылки на объекты данных с помощью определенных пользователем имен, а не
конкретных адресов памяти;
-указание типа данных, определяющего множество значений, которые могут
приниматься объектами этого типа, и множество операций, которые могут применяться к
объектам данного типа.
5
Константы и идентификаторы
Идентификаторы используются в ЯП как имена для различных встречающихся
элементов. Они служат, кроме всего прочего, для обозначения промежуточных
результатов, как держатели мест («параметры») в выражениях, и для обозначений
функций.
Идентификаторы в Турбо Паскале – это имена констант, переменных, меток,
типов, объектов, процедур, функций, модулей, программ и полей в записях.
Идентификаторы могут иметь произвольную длину, но значащими являются только
первые 63 символа.
Наряду с идентификаторами часто используются определенные символы и
последовательности
символов
с
постоянной,
от
конкретизации
не
зависящей
интерпретацией. В этом случае говорят о константах.
Переменные
Переменная – это программный объект, способный принимать значение. Это
значение переменная принимает уже в процессе выполнения программы, обычно в
результате выполнения оператора присваивания.
Типы данных
Язык программирования кроме высокой надежности должен обеспечить множество
типов данных, адекватное области применения. Современные языки имеют множество
предопределенных типов данных и один или более механизмов спецификации типов,
определяемых пользователем. Обычно
имеются предопределенные целые (integer),
действительные (real), символьные (character) и логические (boolean) типы. Символьный
и логический типы определяются
перечислением возможных значений – это
перечислимые типы. Кроме предопределенных перечислимых типов современные языки
программирования позволяют определять пользователю новые перечислимые типы
путем явного указания их значений.
Все упомянутые выше типы являются простыми. У объектов простого типа нет
внутренней структуры. В языках программирования есть также структурированные
типы.
Выражения и операторы
6
При разработке языков главным обоснованием для выбора вводимых в него средств
описания данных является необходимость спецификации данных на различных уровнях,
чтобы данные можно было разрабатывать сверху вниз, уточняя их на каждом уровне.
Такие же соображения применимы и к средствам описания действий. Язык должен
обеспечить конструкции для предоставления всех обычно встречающихся типов
программных структур.
Выражение – это формула для вычисления значения некоторого типа. Тип
выражения определяется типом операндов.
Операнды – первичные составляющие выражения. В общем случае выражение
представляет собой один или несколько операндов, разделенных знаками операций.
Каждый операнд может быть объектом данных или выражением, заключенным в скобки.
Выражение записывается по определенным синтаксическим правилам. Для обозначения
операций используются специальные символы. Часть из них имеет общеизвестный
смысл, другая – объясняется в описании языка. Вычисление выражения состоит в
вычислении операндов и применении указанных операций в порядке, в основном
совпадающим с принятым в математике.
Оператор – ведущее понятие. Любой оператор – это законченная фраза языка,
которая определяет некоторый вполне законченный этап обработки информации.
Оператор – это способ задания некоторого действия для его исполнения. Действие
представляет собой выбор и использование значения, установление отношений между
значениями и переменными, которые их представляют, управление последовательностью
выполнения заданной совокупности действий.
Операторы можно разделить на
-
простые, т.е. те, которые в своем составе не содержат других операторов: оператор
присваивания, перехода, остановки программы, оператор процедуры, пустой оператор;
-
производные, т.е. те, в состав которых входят другие операторы: составной оператор,
оператор выбора, операторы цикла, оператор присоединения, оператор развилки.
Блоки и подпрограммы
Используя перечисленные выше средства,
уже можно составлять реальные
программы. Однако программы решения практических задач обычно довольно велики,
простые языковые средства неадекватно их отражают.
7
Программа – это совокупность логически самостоятельных этапов решения задачи,
каждый из этапов реализует отдельную функциональную часть алгоритма. Каждой части
ставится в соответствие совокупность операторов.
Отношение между отдельными частями программы выражает ее структуру.
Различные языки программирования располагают разными средствами установления
отношений между частями программы.
Блочный принцип заключается в том, что программа представляет собой
совокупность иерархически расположенных блоков, каждый из которых является
законченной системой вложенных процедурных блоков.
Блок – это программная единица, состоящая из двух частей:
Процедуры являются важнейшим элементом любого языка программирования.
Первоначально они были введены только для исключения многократного дублирования
одинаковых последовательностей команд. В настоящее время им придается большее
значение в качестве средства структурирования программы.
Чтобы упростить запись подобных программ, механизм процедур расширяется
введением специальной конструкции – функции.
Функция – это специальная форма процедуры, предназначенная для вычисления
одного значения. Для вызова функции, в отличие от процедуры, ее имя нужно записать в
виде операнда выражения. Вычисленное функцией значение связывается с именем самой
функции, что позволяет обходиться без промежуточных переменных.
Абстрактные типы данных
Чтобы метод последовательного уточнения программ был применим к разработке
как структур данных, так и программных структур, для выражения этих структур
выбираются соответствующие формы языковых конструкций. Например, компоненты
записи могут быть произвольного типа, что позволяет уточнять сложные структуры
данных на различных уровнях. Процедуры можно определять в терминах других
вложенных процедур, что тоже позволяет уточнять сложные действия на нескольких
уровнях. Такие средства структурирования данных, как записи, массивы, объединения,
являются в некоторой степени средствами абстрагирования при описании данных, а
процедуры, функции – средствами абстрагирования при описании действий.
При разработке программного обеспечения усиливается тенденция унифицировать,
объединить эти два пути последовательного уточнения программ – уточнение данных и
8
уточнение действий – с помощью проектирования программ с использованием
абстрактных типов данных. Абстрактный тип данных представляет собой множество
значений и набор операций, с помощью которых (и только с их помощью) можно
обрабатывать эти значения. В этом случае проектирование программ, по существу,
сводится к спецификации проекта программы на некотором уровне уточнения в
терминах множества абстрактных типов данных и связанных с ними операций.
9
Билет №2
СРЕДСТВА ОПИСАНИЯ ДАННЫХ
Классификация структур данных
Используемые в программировании данные можно разделить на две большие
группы:
Данные
Данные
статической структуры
Данные
динамической структуры
Данные статической структуры – это данные, взаиморасположение и взаимосвязи
элементов которых всегда остаются постоянными.
Данные динамической структуры – это данные, внутреннее строение которых
формируется по какому-либо закону, но количество элементов, их взаиморасположение
и взаимосвязи могут динамически изменяться во время выполнения программы,
согласно закону формирования.
Данные статической структуры могут быть простыми (скалярными) и составными
(агрегативными), которые формируются из простых структур по какому-либо закону.
Простым данным в языках программирования соответствуют
стандартные
(предопределенные) типы данных, к которым, как правило относят арифметические
(натуральный, целый, вещественный, комплексный) типы данных, символьный,
логический, указательный (ссылочный) типы. В Turbo Pascal включены натуральные
типы Byte, Word, целые типы Integer, Shortint, Longint, вещественные Real, Single,
Double, Extended, Comp, булевские типы Boolean, ByteBool, WordBool, LongBool,
символьный тип Char и указательный тип Pointer. Вещественный тип в Turbo Pascal
может быть представлен как с фиксированной, так и с плавающей точкой. Стандартные
типы для представления комплексных чисел в Turbo Pascal отсутствуют.
Данные составной структуры бывают однородными, т.е. такими, у которых все
элементы
одинакового
типа,
и
неоднородными
(комбинированными),
которые
объединяют в единое целое разнотипные элементы. К данным однородной структуры
10
относятся массивы, строки и множества, а к комбинированным – простые записи,
вариантные записи, объединения и объекты.
Определение типа
До недавнего времени тип определялся, как множество значений, которые могут
принимать объекты данных этого типа. Такое определение недостаточно точно.
Например, следует ли считать различными типы:
array [1..10] of integer
и
array [1..11] of integer ?
В языке Паскаль эти типы различны.
Определяя типы просто как множества значений, мы не имеем критерия для
предпочтения
допустимых
какой-нибудь
в
языке.
конкретной
Поэтому
интерпретации
пришлось
отойти
от
пространства
такого
значений,
определения
и
сосредоточиться на поведении объектов данных относительно некоторых операций,
понимая под типом множество значений и набор операций, выполняемых над этими
значениями и обладающих некоторыми свойствами. Однако при таком подходе
проблема однозначности тоже не решается полностью.
Эквивалентность типов
Понятие соответствия типов интуитивно кажется ясным, но на самом деле требует
пояснения.
Различают два основных способа определения эквивалентности типов: по структуре
и по имени. Эквивалентность типов по структуре означает, что совпадают описания
типов, т.е. типы совпадают как множество значений; а эквивалентность типов по имени,
что типы, которым в программе даны разные имена, считаются различными независимо
от того, какова их структура, множество значений и т.п.
Например,
Type
Tabl1=array[1..10] of integer;
Tabl2=array[1..10] of integer;
Var
X: array[1..10] of integer;
Y: tabl1;
Z: tabl2;
11
В случае эквивалентности по структуре типы переменных X,Y,Z будут считаться
одинаковыми, а в случае эквивалентности по имени – различными.
Если описание типов в языке допускают параметризацию или использование
свободных идентификаторов (type
t = array[1..N] of integer), то определение
эквивалентности типов еще больше усложняется. Выходом из этого положения является
введение ограничения, заключающегося в возможности использования в качестве
параметров или свободных идентификаторов лишь констант, значение которых
определяется при компиляции и типов с константами (как в Паскале).
Совместимость типов
Совместимость типов бывает двух разновидностей:
 совместимость в выражениях;
 совместимость по присваиванию.
Совместимость в выражениях
При выполнении операций в выражениях могут встречаться операнды различных
типов. Каждая операция имеет свой набор допустимых для нее комбинаций разнотипных
операндов.
Совместимость по присваиванию
Правила совместимости по присваиванию являются менее строгими, чем правила
совместимости в выражениях и допускают более широкий спектр автоматического
преобразования типов.
Простые типы данных
Объекты простых типов не имеют внутренней структуры, они могут содержать
лишь одно неделимое значение.
Числовые типы
Наиболее распространенные в математике типы чисел – это целые (integer) числа,
которые представляют бесконечное множество дискретных значений, и действительные
(real) числа, которые представляют неограниченный континуум значений.
ЦЕЛЫЕ ТИПЫ
Название
Длина, байт
Диапазон значений
Byte
1
0 . . 255
ShortInt
1
-128 . . +127
12
Word
2
0 . . 65535
Integer
2
-32768 . . +32767
LongInt
4
-2 147 483 648 . . +2 147 483 647
Действительные
Переменные этих типов могут принимать любые действительные значения в
указанном диапазоне, которые будут храниться либо с указанным количеством значащих
цифр – плавающие типы, либо с указанной абсолютной точностью – фиксированные
типы.
С фиксированной точкой все числа изображаются в виде последовательности цифр с
постоянным для всех чисел положением точки, отделяющей целую часть от дробной.
Например, в десятичной записи числа имеется 5 цифр в целой части и 5 цифр в дробной;
числа будут иметь вид: +00721.35500, +00000.00328, -10301.20260.
Длина,
Название
байт
Количество
Диапазон
десятичного
значащих цифр порядка
4
Single
7..8
-45..+38
6
Real
11 .. 12
-39 . . +38
8
Double
15 . .16
-324 . . +308
10
Extended
19 . .20
-4951 . . +4932
8
Comp
19 . . 20
-2*1063 +1..+2*1063 -1
Перечислимые типы данных.
Простейший способ введения нового типа данных – перечисление его значений, что
и реализовано в перечислимых типах
Все реализации языка Pascal, в том числе и Turbo Pascal, вплоть до версии 6.0
содержали только один булевский тип Boolean, элементы которого могут принимать
лишь два логических значения: True (истина) и False (ложь). В Turbo Pascal версии 7.0
добавлены еще три булевских типа ByteBool, WordBool и LongBool.
Название
Значению
False Значению
True Размер памяти
соответствует
соответствует
Boolean
Число 0
1
ByteBool
Число 0
Любое
13
1 байт
число, 1 байт
Число 0 в обоих отличное от 0
WordBool
2 байта
байтах
Число 0 во всех
LongBool
4 байта
байтах
Отметим, что новые булевские типы были введены для обеспечения совместимости
разрабатываемых программ с Windows, в которой значению False соответствует 0, а
значению True – любое, отличное от 0, число.
Структурированные типы данных
Любой
из
структурированных
типов
характеризуется
множественностью
образующих этот тип элементов, т.е. переменная или константа структурированного
типа всегда имеет несколько компонентов. Каждый компонент может, в свою очередь,
принадлежать к структурированному типу, что позволяет говорить о возможной
вложенности типов.
Массивы
Для простоты хранения и обработки больших множеств однотипных элементов
используют составные структуры. Типичными такими структурами для сегодняшних
ЭВМ являются массивы. Они соответствуют таблицам или векторам, на элементы
которых можно ссылаться с помощью значений индексов.
Массивы описываются следующим образом:
Массивы можно классифицировать по двум разным признакам:
- по количеству размерностей массивы разделяются на одномерные (векторы),
двухмерные (матрицы) и многомерные;
- по типу элементов массивы разделяются на массивы однородных структур данных,
массивы неоднородных структур данных и массивы файлов.
Type имя_типа is array (T1) of T2;
Здесь T1 – тип индексов, T2 – тип компонентов массива. Каждой компоненте массива
однозначно соответствует некоторое значение типа T1. Например,
Массивы используются особенно часто для представления векторов. Для
представления конечномерных матриц применяют многомерные массивы.
По способу определения типа индексов массивы делятся на три группы:
14

Статические, у которых тип индексов параметризованный и не содержит свободных
идентификаторов. Т.е. перед выполнением программы устанавливаются границы
массивов через числовые значения.

Динамические, т.е. границы индексов в объявлении массивов задаются в виде
выражений, которые могут содержать переменные программы, и значения этих
выражений получаются в процессе выполнения программы. Эти значения для границ
массивов, полученные при вычислении объявлений массивов, уже не изменяются в
течение продолжительности жизни объявленных переменных типа массив.

Гибкие, т.е. границы индексов программных переменных типа массив могут
изменяться в процессе выполнения программы.
Дополнительные возможности языка программирования Паскаль
К дополнительным возможностям Паскаля следует отнести работу с типом данных
множество и работу с файлами.
Множества
Тип данных множество напоминает перечислимый тип данных. Вместе с тем
множество – набор элементов не организованных в порядке следования.
В математике множества – любая совокупность элементов произвольной природы.
Операции, которые производятся над множествами, по существу заключаются во
включении и исключении элементов из множества.
Понятие множества в языке программирования значительно уже математического
понятия.
В Паскале под множеством понимается конечная совокупность элементов,
принадлежащих некоторому базовому типу данных.
В качестве базовых типов могут использоваться:
-перечислимые типы;
-символьный;
-байтовый;
-диапазонные на основе вышеперечисленных.
Такие ограничения связаны с формой представления множества в языке и могут
быть сведены к тому, чтобы функция ord() для используемого базового типа лежала в
пределах от 0 до 255.
15
После того, как базовый тип задан, совокупность значений соответствующего
множественного типа определяется автоматически. В нее входят все возможные
множества, являющиеся произвольными комбинациями значений базового типа. Все эти
множества являются отдельными значениями определенного множественного типа.
недопустимо.
Файловый тип
В программировании существует несколько разновидностей файлов, отличающихся
методом доступа к его компонентам: файлы последовательного доступа и файлы
произвольного доступа.
Файлы произвольного доступа позволяют вызывать компоненты в любом порядке
по их номеру.
Важной особенностью файлов является то, что данные, содержащиеся в файле,
переносятся на внешние носители. Файловый тип – это единственный тип значений,
посредством которого данные, обрабатываемые программой, могут быть получены
извне, а результаты могут быть переданы во внешний мир. Это единственный тип
значений, который связывает программу с внешними устройствами ЭВМ.
Простейший метод доступа состоит в том, что по файлу можно двигаться только
последовательно, начиная с первого его элемента, и, кроме этого, всегда существует
возможность начать просмотр файла с его начала. Таким образом, чтобы добраться до
пятого элемента файла, необходимо, начав с первого элемента, пройти через
предыдущие четыре. Такие файлы называют файлами последовательного доступа.
Типизированные файлы. Длина любого компонента типизированного файла строго
постоянна, т.к. тип компонент определяется при описании, а, следовательно,
определяется объем памяти, отводимый под каждую компоненту. Это дает возможность
организовать прямой доступ к каждой компоненте (т.е. доступ по порядковому номеру).
Текстовые файлы. Текстовые файлы предназначены для хранения текстовой
информации. Именно в таких файлах хранятся, например, исходные тексты программ.
Компоненты текстовых файлов могут иметь переменную длину, что существенно влияет
на характер работы с ними. Доступ к каждой строке текстового файла возможен лишь
последовательно, начиная с первой.
16
Билет №3
СРЕДСТВА ОПИСАНИЯ ДЕЙСТВИЙ
Выражения и операторы действия
Простейшие средства описания действий, которые вычисляют единственное
значение, не изменяя состояния вычислений, - выражения. Они образуются из констант,
переменных и других объектов данных, а также знаков операций и скобок. Операнды
выражений должны быть того типа, который требуется в данном контексте.
Хотя нет ограничений на сложность выражений, однако выражения, содержащие
более 7 операндов, трудны для чтения и понимания и поэтому такие выражения не
рекомендуется использовать.
Операторы действия – это средства языка, позволяющие изменять в процессе
выполнения программы состояние вычислений. Самый простой оператор действия –
оператор присваивания. Оператор присваивания, несмотря на кажущуюся простоту,
имеет очень важное алгоритмическое значение, поэтому приведем еще раз объяснения,
изложенные в первой части.
Еще один оператор действия, хотя его можно лишь условно назвать таковым: он не
выполняет никакого действия, это – пустой оператор ( в Паскале он обознается знаком
‘;’). Последний из простейших операторов действия – оператор останова, который
прерывает работу программы (в Паскале это оператор halt).
Операторы управления
Операторы управления – это средства языка, позволяющие управлять ходом
выполнения программы. Фундаментальными структурами для описания алгоритмов
являются
последовательное,
условное
и
циклическое
выполнение.
Операторы
управления служат для выражения этих структур на языке программирования.
Простейшее средство управления – последовательное расположение операторов в
тексте программы, что определяет последовательное выполнение их в порядке
расположения.
Условные операторы
Условные операторы позволяют выбирать для выполнения те или иные части
программы в зависимости от некоторых условий. В разветвляющихся вычислительных
процессах отдельные этапы вычислений (операторы) выполняются не всегда в одном и
17
том же порядке, а в зависимости от некоторых условий, проверяемых уже по ходу
вычислений.
Для задания подобного рода разветвляющихся вычислительных процессов в языках
программирования существуют условные операторы. Рассмотрим полный условный
оператор:
<полный условный оператор>::= if <логическое выражение>
then <оператор> else <оператор>
Здесь if (если), then (то) и else (иначе) являются служебными словами.
Таким образом, структуру полного условного оператора можно представить в виде
if B then S1 else S2,
где В – логическое выражение, а S1 и S2 – операторы.
Выполнение такого условного оператора сводится к выполнению одного из
входящих в него операторов S1 или S2: если заданное в операторе условие выполняется
(логическое выражение В принимает значение true), то выполняется оператор S1, в
противном случае выполняется оператор S2.
удобна сокращенная форма записи условного оператора:
<сокращенный условный оператор>::= if <логическое выражение>
then <оператор>
Правило выполнения сокращенного условного оператора, имеющего вид:
if B then S
достаточно очевидно: если значение логического выражения В есть true, то
выполняется оператор S; в противном случае никаких иных действий, кроме вычисления
значения выражения В, не производится.
Оператор выбора позволяет выбрать одно из нескольких возможных продолжений
программы. Параметром, по которому осуществляется выбор, служит ключ выбора –
выражение любого порядкового типа.
Структура оператора выбора в Паскале такова:
Case <ключ_выбора> of <список_выбора> [else <операторы>] end
Здесь case, of, else, end – зарезервированные слова (случай, из , иначе, конец);
Оператор выбора работает следующим образом. Вначале вычисляется значение
выражения
<ключ_выбора>,
а
затем
в
последовательности
<список_выбора>
отыскивается константа, равная вычисленному значению. Выполняется оператор,
18
который следует за найденной константой, после чего оператор выбора завершает
работу. Если в списке выбора не будет найдена константа, соответствующая
вычисленному значению ключа выбора, управление передается операторам, стоящим за
словом else. Часть else <операторы> можно опустить, тогда при отсутствии в списке
выбора нужной константы не будет выполнено никаких действий, и оператор выбора
просто завершит свою работу.
Циклы
Простой арифметический цикл (цикл с параметром)
Чаще всего используется следующий вид оператора:
For V:= E1 to E2 do S,
где for (для), to (увеличиваясь к) и do (выполнять, делать) – служебные слова, V –
переменная порядкового типа, называемая параметром цикла, Е1 и Е2 – выражения того
же типа, что и параметр цикла, S – оператор, который и выполняется многократно в
цикле,
называемый
телом
цикла.
Заметим, что в Паскале после do должен стоять один оператор, если необходимо
выполнить несколько действий, то они должны быть объединены в один составной
оператор путем заключения в операторные скобки.
Этот оператор цикла предусматривает присваивание параметру цикла V
последовательных значений от начального значения, равного значению выражения Е1,
до конечного значения, равного значению выражения Е2, т.е. при каждом повторении
выполняется оператор присваивания V:=succ(V), и выполнение оператора S при каждом
значении параметра цикла V. При этом значения выражений Е1 и Е2 вычисляются один
раз, при входе в оператор цикла, а значение параметра цикла V не должно изменяться в
результате выполнения оператора S. Если заданное конечное значение меньше
начального значения (что допустимо), то оператор S не выполняется ни разу.
Оператор цикла с параметром следующего вида:
For V:=E1 downto E2 do S,
где downto (уменьшаясь к) – служебное слово, а все остальные слова и выражения
имеют прежний смысл. Изменение параметра цикла от большего значения к меньшему
происходит при выполнении присваивания V:=pred(V). Заметим, что начальное значение
может быть меньше конечного значения. В этом случае оператор S не выполнится ни
19
разу. Значение параметра цикла по завершении выполнения такого цикла так же
считается неопределенным.
Следует запомнить и то, что для обоих вариантов записи цикла с параметром
справедливо: если начальное и конечное значения равны, то тело цикла (оператор S)
выполнится один раз.
Арифметический цикл с произвольным шагом
Естественным усложнением простого арифметического цикла является цикл, в
котором параметр цикла изменяется не на 1, а на произвольную величину – шаг
приращения. При этом в процессе выполнения цикла шаг изменяется по заданному
закону. Стандартные операторы для реализации такого цикла есть в Форте, в других
языках их приходится организовывать из простейшего арифметического цикла.
Оператор цикла с постусловием
Для задания таких вычислительных процессов в Паскале и служит оператор цикла с
постусловием. Этот оператор имеет вид:
Repeat S1; S2;…;Si until B,
где repeat (повторять) и until (до) – служебные слова, через Si обозначен любой
оператор Паскаля, а через В – логическое выражение.
При
выполнении
этого
оператора цикла
последовательность
операторов,
находящихся между словами repeat и until, выполнится один или более раз. Этот
процесс завершается, когда после очередного выполнения заданной последовательности
операторов логическое выражение В примет (впервые) значение true. Таким образом, с
помощью логического выражения В задается условие завершения выполнения оператора
цикла. Поскольку в данном случае проверка условия производится после выполнения
последовательности операторов (тела цикла), этот оператор цикла и называется
оператором цикла с постусловием.
Оператор цикла с предусловием
В случае оператора цикла с постусловием входящая в него последовательность
операторов заведомо будет выполняться хотя бы один раз. Между тем довольно часто
встречаются такие циклические процессы, когда число повторений цикла тоже
неизвестно заранее, но при некоторых значениях исходных данных предусмотренные в
цикле действия вообще не должны выполняться, и даже однократное выполнение этих
действий может привести к неверным или неопределенным результатам.
20
Для задания подобного рода вычислительных процессов, когда число повторений
цикла заранее неизвестно и действия, предусмотренные в цикле, могут вообще не
выполняться, и служит оператор цикла с предусловием. Этот оператор цикла имеет в
Паскале следующий вид:
While B do S,
где while (пока), do (делать, выполнять) – служебные слова, В – логическое выражение, S
– оператор. Здесь оператор S выполняется ноль или более раз, но перед каждым
очередным его выполнением вычисляется значение выражения В, и оператор S
выполняется только в том случае, когда значение выражения В true. Выполнение
оператора цикла завершается, когда выражение В впервые принимает значение false.
Если это значение выражение В принимает при первом же его вычислении, то
оператор S не выполнится ни разу.
Процедуры и функции
Паскаль позволяет структурировать программу, отделив ее функционально
независимые части. Отдельные, функционально независимые части программы
называют подпрограммами (процедурами и функциями).
Название подпрограммы означает, что она подобна и подчинена программе.
Подпрограммы
решают
очень
важные
задачи,
значительно
облегчая
программирование:
1) избавляют от необходимости многократно повторять в тексте программы аналогичные
фрагменты;
2) улучшают структуру программы, облегчая ее понимание при разборе;
3) повышают
устойчивость
к
ошибкам
программирования
и
непредвиденным
последствиям при модификациях.
Подпрограммы могут быть:
1) стандартными, т.е. определенными системой Паскаль;
2) пользовательскими, т.е. разработанными собственно пользователем.
Существует два способа объединения подпрограмм и программ:
1) текст подпрограмм может быть приведен в разделе описаний использующей их
программы до слова begin, с которого начинается тело самой программы;
21
2) подпрограммы группируются в отдельных файлах, имеющих специальную структуру
– модулях. Для того чтобы основная программа могла использовать модуль, он должен
быть подключен к основной программе.
Первый способ используется, когда программа в целом не слишком велика, а ее
подпрограммы, по-видимому, не будут использованы в других программах.
Второй
способ
желателен
для
тех
программ,
которые
составляют
Ваш
технологический задел по программированию и могут использоваться в других
программах. Кроме того, оформление отдельных модулей желательно для больших
программ, когда текст становится неудобным для восприятия.
Структура текста подпрограммы соответствует структуре текста основной
программы за двумя исключениями:
1)
подпрограмма
начинается
с
заголовка,
содержащего
имя
подпрограммы,
передаваемые в нее и возвращаемые от нее параметры. Заголовок подпрограммы
отличается от заголовка основной программы;
2)
подпрограмма заканчивается точкой с запятой, а не точкой.
Вызов подпрограммы происходит при каждом употреблении ее имени в основной
программе. При вызове подпрограммы начинают выполняться ее операторы до
завершающего слова end или специального выхода из подпрограммы – exit. После
выхода из подпрограммы управление передается команде, следующей за обращением к
подпрограмме.
Отличия процедуры от функции связаны со способом вызова.
Для вызова процедуры приводится ее имя и в скобках приводится список
передаваемых и получаемых параметров. Вызов процедуры – оператор.
Вызов функции производится по ее идентификатору и списку параметров, но, в
отличие от процедуры, результат функции имеет определенное значение, поэтому
функции используются не как операторы, а как выражения или операнды в выражениях.
Для того чтобы функция получила численное значение, в теле функции необходимо
присвоить ей это значение.
Вычисление выражений, содержащих обращение к функции, происходит по
следующему алгоритму:
1) вычисляются выражения для аргументов функции;
2) значения аргументов присваиваются параметрам из заголовка описания;
22
3) выполняется тело функции и вычисляется ее значение;
4) значение функции ставится в исходное выражение на место обращения к функции;
5) вычисление исходного выражения продолжается.
Заголовки процедуры и функции имеют вид:
Procedure <имя_процедуры> (<список параметров>);
Function <имя_функции> (<список параметров>): <тип результата>;
Формы записи списка параметров в заголовке подпрограммы и при ее вызове
отличаются.
При вызове подпрограммы в списке параметров могут следовать через запятую
константы, переменные и выражения.
В заголовке подпрограммы запись напоминает объявление переменных в разделе
описаний. Для всех элементов списка должен быть указан тип. Перечисление
осуществляется через точку с запятой.
Область действия переменных, взаимодействие блоков
В программе может быть описано сколько угодно блоков (подпрограмм). Внутри
этих блоков могут быть описания других блоков. Важно знать, откуда и какие блоки
могут быть вызваны.
«Блок – это дом с зеркальными стенами. Изнутри видно все, что делается снаружи.
Внутрь заглянуть нельзя».
Рекурсия
Подпрограммы в Паскале могут обращаться сами к себе. Такое обращение
называется рекурсией.
Для того чтобы такое обращение не было бесконечным, в тексте подпрограммы
должно быть условие, по достижению которого дальнейшее обращение к подпрограмме
не происходит.
Рекурсия изнутри
Это может показаться удивительным, но самовызов процедуры ничем не отличается
от вызова другой процедуры. Что происходит, если одна процедура вызывает другую? В
общих чертах следующее:
1)
в памяти размещаются параметры, передаваемые процедуре (но не параметры-
переменные!);
23
2)
в другом месте памяти сохраняются значения внутренних переменных вызывающей
процедуры;
3)
запоминается адрес возврата в вызывающую процедуру;
4)
управление передается вызванной процедуре.
Если процедуру вызвать повторно из другой процедуры или из нее самой, будет
выполняться тот же код, но работать он будет с другими значениями параметров и
внутренних переменных. Это и дает возможность рекурсии.
При описании реализации подпрограммы можно использовать сокращенный
заголовок, когда приводится только имя подпрограммы и опускается список параметров
и тип результата для функции.
24
Билет№4
Инструментальные средства ускоренной разработки программ
25
Билет №5
Модули
Модуль (библиотека), так же как и основная часть программы, содержится в отдельном
файле и состоит из нескольких разделов, аналогичных разделам основной части
программы. Рассмотрим структуру модуля.
Unit
Заголовок модуля
Interface
Указание на начало интерфейсной секции
Uses
Раздел подключения модулей (библиотек)
Const
Раздел описания констант
Туре
Раздел описания типов данных
Var
Раздел описания переменных
Implementation
Указание на начало описательной секции
Uses
Раздел подключения модулей
Label
Раздел описания' меток безусловного перехода
Const
Раздел описания констант
Туре
Раздел описания типов данных
Var
Раздел описания переменных
initialization
Начало секции инициализации
Раздел описания логики инициализации
finalization
Начало секции деинициализации
Раздел описания логики деинициализации
End.
Окончание модуля
Исходный текст модуля может содержать четыре секции:
26
Интерфейсная
секция
(начинается
ключевым
словом
interface),
в
которой
располагаются заголовки процедур и функций, а также описания констант (раздел
описания констант начинается с ключевого слова Const), нестандартных типов данных (ключевое слово Туре) и переменных
(ключевое слово Var). Все идентификаторы, описанные в интерфейсной секции,
доступны для использования
вызывающим (подключающим модуль) частям программы, наряду с их собственными
описаниями.
Описательная секция (начинается ключевым словом Implementation), в которой
располагаются описания процедур и функций, заголовки которых указаны в
интерфейсной секции, а также другие процедуры и функции, используемые
подпрограммами
данного
модуля,
но
не
доступные
фрагментам
программ,
подключающим модуль. Также в описательной части модуля могут располагаться
описания меток безусловного перехода, констант, нестандартных типов данных и
переменных (начинаются, соответственно, с ключевых слов Label, Const, Type и Var).
Все эти описания также не доступны фрагментам программы, подключившим модуль, и
используются только для внутренних целей библиотеки.
Секцияинициализации (начинается ключевым словом initialization), содержащая
команды, которые необходимо выполнить при подключении модуля к программе. Таким
образом, перед выполнением какой-либо программы, к которой подключаются внешние
модули, сначала выполняются инициализационные части
модулей
(в порядке
подключения). Данная секция не является обязательной.
Секция деинициализации, используемая только при наличии секции инициализации,
содержащая команды, которые необходимо выполнить при завершении приложения.
Данная секция не является обязательной и может использоваться для освобождения
ресурсов, занятых в секции инициализации. Наличие ключевого слова End с точкой
является обязательным и означает окончание модуля.
Наличие интерфейсной и описательных секций в библиотеке является обязательным,
даже, если в этих секциях ничего не содержится. Таким образом, ключевые слова
Interface и Implementation должны присутствовать в тексте модуля всегда.
Название модуля — идентификатор, указываемый после ключевого слова unit в
заголовке модуля. Название модуля строится по обычным правилам именования
27
идентификаторов и должно соответствовать имени файла, в котором находится описания
модуля. Именно по названию осуществляется подключение модулей к основной части
программы или к другим модулям. Как уже упоминалось ранее, подключение
производится в разделе подключения модулей Uses по названию.
Приведем пример простейшего модуля и программы, которая подключает к себе этот
модуль. Код модуля приведен в листинге 1.1, а код подключающей его программы — в
листинге 1.2.
Листинг 1.1 .Простейший модуль
Unit Unitl;
Interface
{Заголовок модуля, название модуля — Unitl}
(Указание на начало интерфейсной секции}
Implementation {Указание на начало описательной секции}
End. {Окончание модуля}
Листинг 1.2. Простейшая программа, подключающая модуль
Program Program!; ……..{Заголовок программы, название программы — Programl}
Uses…….{Раздел подключения модулей}
Unitl; ….{Подключение модуля Unitl}
Begin ….{Начало раздела описания логики программы}
End. ……{Конец раздела описания логики программы}
28
Билет №6
Программирование баз данных
Базами данных называют электронные хранилища информации доступ к которым
осуществляется с помощью одного или нескольких ПК. Обычно базы данных создается
для хранения и доступа к данным, содержащим сведения о области чел деятельности или
области реального мира.
Типы СУБД
СУБД – это программные средства, предназначенные для создания, наполнения,
объявления и удаления БД.
Три основных вида СУБД:
 Промышленно универсального назначения – не имеет четко ограниченных
рамок применения, расчитанны на все случаи жизни.
 Промышленно специального назначения.
 Разрабатываемые для конкретного заказчика.
Как специализированные, так и универсально-промышленные СУБД относительно
дешевые и достаточно надежные и готовы к работе, в то время как созданные СУБД
требуют затрат и времени. Однако в отличии от промышленных, заказанные СУБД в мах
степени учитывают специфику работы заказчика, их интерфейс обычно понятен
пользователям и не требует спец знаний.
Таблицы СУБД и связи м/д ними
Единицей, хранящейся в БД и является таблица. Каждая табл. представляет собой
совок строк и столбцов. Где строка соотв. конкретному событию или явлению, а столбец
атрибутам (признакам, параметрам) этого объекта, события, явления. М/д отдельными
таблицами БД могут существовать связь. Например: Ио покупателя в пред табл. может
быть добавлена в другой. БД, м/д табл., в кот сущ. связь – реляционная.
Связные отношения м/д таблицами взаимодействуют по принципу главная детальная. Главная - родительская, а детальная – дочерняя. Одна и та же таблица не
может быть ни той, ни другой по отношению к табл. БД.
Первичные ключи и индексы
В каждой таблице БД может сущ. первичный ключ – поле или набор полей
однозначно идинтефицирующий запись. Значение первичного ключа в таблице БД
должно быть уникален, т.е. в таблице не должно существовать 2х или более записей с
29
одинаковыми значениями первичного ключа. ПК облегчают установление связей м/д
таблицами. В таблице таким ключом может быть одноименное поле.
Индексы не требуют непременной уникальности значений входящих в их состав
полей. Они устанавливаются по полям, которые используются при поиске и сортировки
данных: индексы помогут системе значительно быстрее найти нужные данные и
отсортировать их в нужной последовательности.
Создание БД в Delphi
I Создание БД
1. Пуск – программы – Borland Delphi – Database Desktop
2. File – new – table – Paradoks7
3. Настройка таблицы: Table properties – Table. Language+Madifity … Пароль –
Password Security
4. Сохранить на диске С.
II Соз образа
1. Пуск – программы – Borland Delphi – SQL Explorer
2. Object – new – название моей БД
3. Path – указать путь. Связь object – Apply
III Созд формы в Delphi
Data Access – Data Source1
Data Control – DB Grid – таблица
DB Navigator – управление таблицей
BDE – Table
IV Свойства
1. Table
Data Base Name – образ
Table Name – таблица
2. DB Grid
Data Source1
текст
заголовок
3. DB Navigator
Data Source
4. Data Source
Data Set
30
4. Table Active = true
V Сохранить
Отчеты
31
Билет №7
Работа с графикой
Графика языка Паскаль – это перечень графических процедур и функций.
1. Line – процедура рисования отрезков. Аргументы процедуры: координаты точек
концов отрезка. Отрезок рисуется от нач точки до последней. Отрезок рисуется
цветом, установленным последней процедурой setcorol.
2. Circle – процедура рисования окружности. Аргументы процедуры: корд центра и
радиус.
3. putpixel: Процедура установки точки. Аргументы процедуры: координаты точки и
цвет точки.
4. initgraph – Процедура инициализации графического экрана. Данная процедура
должна выполнятся перед первым вызовом графической процедуры или функции.
5. getpixel – функция, определяющая цвет заданной точки. Аргументы процедуры:
координаты точки.
6. setfillstyle – процедура, определяющая способ закраски контура. Аргументы
процедуры: шаблон закраски и цвет закраски.
7. floodfill
–
процедура,
осуществляющая
закраску.
Аргументы
процедуры:
координаты точки, в которую льётся краска, и номер цвета контура, до которого
льётся краска.
8. setcolor – процедура установки цвета для рисующих процедур. Аргументы
процедуры: номер устанавливаемого цвета.
9. setbkcolor – процедура установки цвета фона. Аргумент процедуры: номер
устанавливаемого цвета.
10.outtextxy – процедура установки строки символов в графическом режиме экрана.
Аргументы процедуры: координаты точки, с которой начинается установка строки,
и устанавливаемая строка.
11.closegraph- процедура закрытия графического экрана.
12.cleardevice- процедура очистки экрана.
В Delphi с помощью механизмов инкапсуляции скрыты не только подробности
взаимодействия с физическими устройствами вывода графической информации, но и
вызов системных функций. Для представления и использования графического контекста
и его характеристик предусмотрены специальные типы данных и классы.
32
Графический контекст представлен в Delphi классом TCanvas (англ. Canvas —Полотно),
описанном в модуле Graphics, а характеристики контекста — классами-оболочками
системных графических ресурсов трех видов:
1. шаблоны обводки (класс ТРеn);
2. шаблоны заливки (класс TBrush);
3. шрифты (класс TFont).
Таким образом, в программах Delphi процесс вывода графической информации
становится длиннее на один шаг. Однако это в некоторой степени компенсируется
снижением сложности программирования за счет более удобного представления данных
в виде экземпляров классов и автоматического выполнения объектами Delphi некоторых
необходимых действий.
Методы вывода изображений
Для копирования изображения, хранимого в каком-либо наследнике класса TGraphic, на
область отображения используются следующие методы классы TCanvas:
Procedure Draw(X, Y: Integer; Graphic: TGraphic);
Procedure StretchDraw(const Rect: TRect; Graphic: TGraphic);
Метод Draw используется для копирования изображения в заданные координаты области
отображения без изменения его размеров, а метод StretchDraw позволяет задать область,
которую будет занимать изображение на области отображения. Соответственно, если
размеры изображения отличаются от размеров этой области, изображение будет
автоматически отмасштабированно.
Методы, описанные в классе TGraphic являются либо абстрактными, либо просто не
имеют реализации, и предназначены для переопределения в классах-наследниках. Все
они заявляют возможности чтения изображений из некоторых структур данных, а
именно файлов, потоков или буфера обмена Windows, или их записи в эти структуры.
В Delphi предусмотрен класс TPicture, являющийся оболочкой для растровых
изображений, иконок и метафайлов, и имеющий возможность использовать другие
форматы изображений, если в программе существует такая необходимость.
Для хранения растровых изображений, иконок и метафайлов в классе TPicture
предусмотрены соответственно свойства Bitmap, Icon и Metafile
Класс TBitmap предназначен для хранения растровых изображений, представленных в
самом простом виде — растровой картой без возможностей сжатия. Однако такой
33
формат не всегда удобен в силу большого объема, занимаемого файлами с такими
изображениями на диске. Одним из самых распространенных форматов, использующих
сжатие, является JPEG, для поддержки которого в Delphi предназначен класс
TJPEGImage
Класс Tlcon
Для использования Windows-иконок, то есть стандартных растровых изображений
Windows, хранимых в файлах с расширением ICO, предназначен класс Tlcon,
возможности которого ограничены чтением таких изображений из файлов, выводом их
на области отображения без изменения размеров (то есть использование метода
StretchDraw класса TCanvas недопустимо), а также сохранением.
Метафайл — это последовательность команд вывода графической информации,
записанная в специальном формате, поддерживаемом операционной системой Windows.
Для хранения метафайлов используются файлы с расширением WMF.
Особенностью метафайлов по отношению к растровым изображениям является подход к
представлению в них графической информации, который заключается в хранении
последовательности команд вывода, а не двухмерного массива точек. Соответственно,
объем файлов, в которых хранятся такие изображения, зависит только от количества
элементов в этих изображениях, а не от их размеров. Дополнительным преимуществом
метафайлов
является
существенное
повышение
качества
изображений
масштабировании в связи с векторным представлением изображения в метафайле.
34
при
Download