Category Archives: Программирование

Пространственная фильтрация

Пространственная фильтрация

6. ПРОСТРАНСТВЕННАЯ ФИЛЬТРАЦИЯ
6.1. Логические операции над бинарными изображениями
Являясь результатом процесса бинаризации полутоновых изображений, дискретные бинарные изображения в качестве возможных
значений яркости пикселей могут иметь только 0 и 1. В таком случае
яркостные помехи проявляются в виде одиночных светлых пикселей
в темных областях изображения и наоборот, а также в виде одиночных нарушений прямолинейных границ и утраченных угловых точек. Пример подобных нарушений исходного изображения приведен
на рис. 6.1.
Основная идея рассматриваемых далее методов обработки бинарных изображений состоит в определении логической функции, вычисляемой в окрестности текущего пикселя исходного изображения
в зависимости от пространственного расположения и значений пикселей данной окрестности, и в присвоении соответствующему пикселю результирующего изображения значения 0 или 1 как результата
вычисления логической функции.
Несомненно, что при увеличении размера окрестности существенно возрастают сложность логической функции и время обработки
изображения. Как следствие, анализ обычно производится в диапазоне восьми соседних с центральным пикселей, т. е. логическая функция строится для окрестности размером 3 ґ 3 пикселя, условные
обозначения которых примем следующими:

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

Исходное бинарное изображение
1 1
1 1 1 1
1 1 1 1 1 1
1 1 1 1

1

Результат обработки L3

1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1

1

1 1 1 1 1 1
1 1 1 1 1 1 1

1 1 1 1 1 1 1
1 1 1 1 1 1

1 1 1 1
1

1

1 1 1 1 1 1
1

Результат обработки L

1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1

4

Результат обработки L
5

1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1
1 1 1 1 1 1

Рис. 6.1. Применение логических фильтров для улучшения изображения
их значения совпадают. Четырехсвязная схема означает, что пиксель p проверяется на связанность только с пикселями b, d, e, g. Следовательно, при такой схеме связности, даже если значение пикселя
p совпадает со значением какого&либо из пикселей a, c, f или h, но
отличается от значений пикселей b, d, e, g, пиксель p считается изолированным.
Например, для восьмисвязной схемы логическая функция
L1= щp•(a•b•c•d•e•f•g•h)Ъp•(aЪbЪcЪdЪeЪfЪgЪh)
позволяет изменить значение пикселя p с 1 на 0 при условии, что в
его окрестности нет ни одного пикселя со значением 1, и с 0 на 1, если
все соседние пиксели имеют значение 1. В результате подавляются светлые и темные одиночные помехи. Здесь и далее условные обозначения
соответствуют общепринятым правилам при записи

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

Filed under Программирование

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

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

ВВЕДЕНИЕ
В отличие от технологических процессов производственных
предприятий, подлежащих хорошо определенному, часто стандартизованному контролю, в области разработки программных
средств (ПС) не удается в точности применить те же принципы
управления качеством. Этому способствует принципиальное
отличие в характере производства товаров и разработки ПС.
В первом случае существует повторяемая, детерминированная
последовательность действий, в то время как разработка ПС носит наукоемкий, экспериментальный характер. Несмотря на существование подходов к инженерии разработки ПС, эта область
все еще является «молодой» и соответствующим методологиям
не хватает «зрелости».
Область управления качеством ПС развивается уже на протяжении четырех десятилетий, однако говорить о повсеместном
повышении качества ПС не приходится. Основная причина этого
заключается в том, что существующие модели оценки качества
не выполняют своей главной задачи: предоставить количественную информацию, необходимую для принятия управленческих
и инженерных решений на протяжении всего жизненного цикла
(ЖЦ) ПС. Неопределенности и пробелы в формализации характеристик ПС оставляют широкое поле для произвола при оценивании их качества, ведут к появлению дефектов и ошибок при
применении ПС пользователями. Возрастание сложности и ответственности задач, решаемых ПС, а также возможного ущерба
от недостаточного их качества обуславливают важность решения проблемы точного описания требований к характеристикам
качества и их измерениям на различных этапах ЖЦ ПС. В ряде
стандартов и публикаций большое внимание уделяется процессам обеспечения качества ПС, однако в основном умалчивается,
что означает высокое качество, какими характеристиками оно
описывается, как его следует измерять и сравнивать с требованиями, формализованными в техническом задании (Тз) [1].
По разным оценкам, при создании ПС стадия разработки
занимает 10–15 % бюджета, при этом до 80 % может быть потрачено на исправления ошибок, возникших на этой стадии [2].
Согласно данным отчета, опубликованного в 2002 г. Национальным институтом по стандартам и технологии, объем экономических потерь из-за ошибочного программного обеспечения в США
достигает миллиардов долларов в год и составляет, по некоторымоценкам, около 1 % национального валового внутреннего продукта [3]. Подобных данных о ситуации с разработкой ПС в РФ
нам найти не удалось, но, скорее всего, тенденция не противоречит той, которую можно увидеть согласно данным о разработке
ПС в США.
В работе [4] дано следующее определение качественного проекта ПС: «Хороший проект является результатом баланса компромиссов с целью минимизации общей стоимости разработки
системы»; в работе [5] отмечается, что

Комментарии к записи Управление качеством программных средств отключены

Filed under Программирование

Информационные технологии и системы в электромеханике и электроэнергетике

Информационные технологии и системы в электромеханике и электроэнергетике

СОДЕРЖАНИЕ

Предисловие ………………………………………………………….. 4
1. Общие тенденции развития современной энергетики ……….. 5
1.1. Перспективы развития мировой энергетики …………….. 5
1.2. Либерализация электроэнергетики ……………………….. 12
1.3. Положение энергетики в Российской Федерации (по материалам ОАО «РАО «ЕЭС России») ……………………….. 18
1.4. Прикладная значимость оценки тенденций развития отрасли …………………………………………………………….. 21
2. Программы расчета электромагнитных полей ……………….. 23
2.1. Основные положения ………………………………………… 23
2.2. Программы на основе аналоговых алгоритмов ………….. 24
2.3. Численный метод конечных элементов …………………… 25
2.4. Программа расчета электромагнитных полей в электрических машинах FEMAG …………………………………….. 28
3. Системы автоматизированного управления (SCADA) ………. 51
3.1. Назначение системы управления ………………………….. 51
3.2. Общая история развития систем SCADA ………………… 54
3.3. Основные требования к системам управления …………… 55
3.4. Системы SCADA на базе MS Windows …………………….. 60
3.5. Коммуникация в системах управления …………………… 81
4. Специальные информационные системы – Grid Computing … 96
Библиографический список ………………………………………… 107

ПРЕДИСЛОВИЕ
Учебное пособие написано на основе лекций по информационным
системам в электромеханике и электроэнергетике, читаемых автором с 2002 г. по настоящее время на кафедре «Информационные технологии в электромеханике и робототехнике» Санкт,Петербургского государственного университета аэрокосмического приборостроения для студентов специальностей «Электромеханика» и «Роботы и
робототехнические системы». Кроме того, книга представляет интерес для студентов специальности «Управление и информатика в технических системах».
Целью курса является создание у студентов общего представления о движущих факторах развития современной энергетики и электротехники, технических тенденциях при реализации информационных систем, а также формирование комплексного подхода к решению технических задач в данной области. Учебное пособие состоит
из четырех глав.
В первой главе дается характеристика процессов, определяющих
приоритетные направления и характер развития электроэнергетики
в мире, Европе и России. Приведены примеры реальных проблем отрасли, что должно помочь получить общие представления о задачахс которыми приходится сталкиваться специалистам в области энергетики, информатики и электромашиностроения.
Вторая глава посвящена численным методам расчета электромагнитных полей в электрических машинах. Рассматриваются основы
метода конечных элементов. Производится детальный разбор моделирования и расчета электромеханической системы с помощью программы расчета электромагнитного поля FEMAG.
В третьей

Комментарии к записи Информационные технологии и системы в электромеханике и электроэнергетике отключены

Filed under Программирование

Элементы профессионального дизайна программ на языке С/С++ в учебных работах студентов

Элементы профессионального дизайна программ на языке С/С++ в учебных работах студентов

СОДЕРЖАНИЕ
Предисловие …………………………………………………………. 5
1. Особенности мышления разработчика программного
обеспечения ………………………………………………………….. 6
1.1. Определение терминов ……………………………………… 6
1.2. Стиль программирования как элемент дизайна
программ ……………………………………………………… 9
1.3. Выполнение учебных работ ……………………………….. 14
2. Комментирование ………………………………………………… 20
2.1. Основы комментирования …………………………………. 20
2.2. Типы комментариев ………………………………………… 23
2.3. Комментарии – заголовки файлов ……………………….. 23
2.4. Комментарии – заголовки функций ……………………… 25
2.5. Комментарии блоков текста ………………………………. 27
2.6. Сопровождающие комментарии ………………………….. 28
2.7. Комментирование данных ………………………………… 30
2.8. Комментирование определений типов данных …………. 33
3. Именование ……………………………………………………….. 34
3.1. Общие замечания …………………………………………… 34
3.2. Именование функций ………………………………………. 37
3.3. Именование переменных ………………………………….. 39
4. Основы размещения кода ……………………………………….. 43
4.1. Использование пробелов ………………………………….. 43
4.2. Размещение по строчкам ………………………………….. 46
4.3. Вертикальное выравнивание и отступы по горизонтали 48
4.4. Размещение фигурных скобок ……………………………. 49
4.5. Объявления данных ………………………………………… 49
4.6. Определения и прототипы функций ……………………… 52
5. Инструкции: размещение и употребление ……………………. 55
5.1. Инструкция)выражение …………………………………… 55
5.2. Составная инструкция (инструкция)блок) …………….. 56
5.3. Условная инструкция if …………………………………… 56
5.4. Инструкция выбора варианта switch ……………………. 58
5.5. Условная инструкция if … else if … else ……………….. 61
5.6. Инструкция цикла с предусловием while ……………….. 62
5.7. Инструкция цикла с постусловием do … while ………… 62
5.8. Инструкция цикла for …………………………………….. 63
5.9. Инструкция цикла нестандартной структуры …………. 63
5.10. Инструкция возврата из функции return ……………… 64
6. Функциональная декомпозиция программного проекта ….. 66
6.1. Сложность программного обеспечения и ее источники .. 66
6.2. Методы преодоления сложности программного
обеспечения ………………………………………………….. 69
6.3. «Монолитный» стиль программирования ……………… 70
6.4. Функциональная декомпозиция …………………………. 73
7. Файловая декомпозиция программного проекта ……………. 76
7.1. Расширения имен файлов …………………………………. 76
7.2. Исходные файлы ……………………………………………. 77
7.3. Заголовочные файлы ………………………………………. 82
8. Тестирование и отладка ………………………………………… 93
8.1. Общие замечания …………………………………………… 93
8.2. Разновидности исходных данных для тестирования …. 93
8.3. Выполнение теста: обработка пакета контрольных
примеров ……………

Комментарии к записи Элементы профессионального дизайна программ на языке С/С++ в учебных работах студентов отключены

Filed under Программирование

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

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

преДиСлоВие
В работах профессоров и. А. орурка, л. А. осипова [1, 2],
В. Ф. Шишлакова [3 – 6], посвященных использованию обобщенного метода галеркина, для решения задач параметрического
синтеза систем автоматического управления (САу) рассматривались одномерные и односвязные линейные и нелинейные, непрерывные и импульсные (с различными видами модуляции сигналов) системы. В работах [3, 4] было математически доказано, что
обобщенный метод галеркина позволяет решать задачу синтеза
параметров систем управления различных классов с единых математических, методологических и алгоритмических позиций.
таким образом, данный математический аппарат представляется весьма универсальным, что дало возможность авторам монографии распространить обобщенный метод галеркина на новый
класс САу – многосвязные системы управления (мСАу).
В первом разделе приводится обзор методов исследования
многосвязных систем автоматического управления различных
классов. Анализируются их достоинства и недостатки, определяющие возможность использовать различные подходы при решении задачи синтеза мСАу. кроме того, рассматриваются методы
построения моделей элементов электромеханических систем, поскольку в книге разбирается решение технической задачи синтеза и исследования динамических свойств автономной электро-
энергетической установки, представляющей собой многосвязную систему автоматического управления.
Второй раздел посвящен распространению обобщенного метода галеркина на непрерывные линейные и нелинейные мСАу.
на основе анализа уравнений, описывающих динамические
свойства систем управления указанных классов, построены обобщенные математические модели, позволяющие решать задачу
параметрического синтеза непрерывных мСАу обобщенным методом галеркина. подробно рассмотрены особенности применения общей схемы решения задачи синтеза для частных случаев
многосвязных систем.
разработанные математические и вычислительные модели
импульсных элементов, формирующих модулированные по амплитуде последовательности треугольных и трапецеидальных
импульсов, применение которых дает возможность более полно
и точно решать задачи как анализа, так и синтеза амплитудноимпульсных систем управления, рассмотрены в третьем разделе.
В четвертом разделе обобщенный метод галеркина распространен на линейные и нелинейные мСАу, содержащие амплитудноимпульсные модуляторы. Анализ частных структур импульсных
мСАу позволил построить обобщенные математические модели,
применение которых дает возможность синтезировать параметры регуляторов обобщенным методом галеркина без использования принципа автономности.
Аналитические рекуррентные соотношения вида «входвыход», определяющие интегралы галеркина

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

Filed under Программирование

Задания по информатике. Лабораторная работа 2

Задания по информатике. Лабораторная работа 2

Лабораторная работа 2

Задание 1-1

Введите с клавиатуры целые числа до первого отрицательного. Подсчитайте

  1. количество введенных чисел и выведите результат на экран;
  2. произведение четных чисел и выведите результат на экран;

Задание 1-2

Вычислить n!

Лабораторная работа 2

Задание 2-1

Введите с клавиатуры целые числа до первого нечетного. Подсчитайте

  1. количество введенных чисел и выведите результат на экран;
  2. сумму отрицательных чисел и выведите результат на экран;

Задание 2-2

Вычислить сумму n- чисел ряда Фибоначчи.

Лабораторная работа 2

Задание 3-1

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

  1. количество введенных чисел и выведите результат на экран;
  2. количество чисел, разряд единиц которых равен 5  и выведите результат на экран;

Задание 3-2

Вычислить сумму n чисел

1*2+2*3+3*4+4*5+…

Лабораторная работа 2

Задание 4-1

Введите с клавиатуры целые числа (однозначные и двузначные) до первого трехзначного. Подсчитайте

  1. сумму введенных чисел и выведите результат на экран;
  2. количество  чисел, кратных 4 и выведите результат на экран;

Задание 4-2

Вычислить сумму n слагаемых

1+1/2+1/4+1/8……      (результат стремиться к двум)


Лабораторная работа 2

Задание 5-2

Введите с клавиатуры однозначные целые числа до первого двузначного. Подсчитайте

  1. произведение  введенных чисел и выведите результат на экран;
  2. количество нечетных чисел и выведите результат на экран;

Задание 5-2

Вычислить сумму n чисел

+    +    …….  (результат стремится к 1/2)

 

Лабораторная работа 2

Задание 6-1

Введите с клавиатуры целые числа до первого отрицательного. Подсчитайте

  1. количество введенных чисел и выведите результат на экран;
  2. сумму четных чисел и выведите результат на экран;

Задание 6-2

Вычислить количество разрядов в числе x.

 

Лабораторная работа 2

Задание 7-1

Введите с клавиатуры целые числа до первого кратного пяти. Подсчитайте

  1. количество введенных чисел и выведите результат на экран;
  2. произведение однозначных чисел и выведите результат на экран;

Задание 7-2

Вычислить  результат от деления нацело числа x на число y, используя только операцию вычитания.


Лабораторная работа 2

Задание 8-1

Введите с клавиатуры двузначные целые числа до первого нечетного. Подсчитайте

  1. количество введенных чисел и выведите результат на экран;
  2. сумму чисел с равными разрядами единиц и десятков

Комментарии к записи Задания по информатике. Лабораторная работа 2 отключены

Filed under Программирование

Inline assembly language BASM (англ.)

Inline assembly language BASM (англ.)

 

CONTENTS

 

Chapter 1  BASM.DOC                1         Inline assembly and register

Inline assembly language . . . . 1         variables . . . . . . . . .  7

BASM . . . . . . . . . . . . . 1         Inline assembly, offsets, and

Inline syntax  . . . . . . . . 2         size overrides  . . . . . .  7

Opcodes  . . . . . . . . . . . 3       Using C structure members . .  7

String instructions  . . . . 5       Using jump instructions and

Prefixes . . . . . . . . . . 5       labels  . . . . . . . . . . .  8

Jump instructions  . . . . . 5     Interrupt functions . . . . . .  9

Assembly directives  . . . . 6     Using low-level practices . . . 10

Inline assembly references to

data and functions . . . . . . 6   Index                             13

 

TABLES

___________________________________________________________________________

1.1: Opcode mnemonics  . . . . . . 4   1.3: Jump instructions  . . . . . .6

1.2: String instructions . . . . . 5

 

 

ii

 

 

 

 

 

 

 

 

 

 

 

 

 

Online document

___________________________________________________________________________

 

 

 

BASM.DOC

 

 

This online file tells you how to use the Turbo C++

built-in inline assembler (BASM) to include assembly

language routines in your C and C++ programs without

any need for a separate assembler. Such assembly

language routines are called inline assembly, because

they are compiled right along with your C routines,

rather than being assembled separately, then linked

together with modules produced by the C compiler.

 

Of course, Turbo C++ also supports traditional mixed-

language programming in which your C program calls

assembly language routines (or vice-versa) that are

separately assembled by TASM (Turbo Assembler), sold

separately. In order to interface C and assembly

language, you must know how to write 80×86 assembly

language routines and how to define segments, data

constants, and so on. You also need to be familiar with

calling conventions (parameter passing sequences) in C

and assembly language, including the pascal parameter

passing sequence in C.

 

Inline assembly  =======================================================

language

Turbo C++ lets you write assembly language code right

inside your C and C++ programs. This is known as inline

assembly.

 

——————  If you don’t invoke TASM, Turbo C++ can assemble your

BASM  inline assembly instructions using the built-in

——————  assembler (BASM). This assembler can do everything TASM

can do with the following restrictions:

 

o It cannot use assembler macros

 

 

 

 

— 1 —

 

 

 

 

 

 

 

o It cannot handle 80386 or 80486 instructions

 

o It does not permit Ideal mode syntax

 

o It allows only a limited set of assembler directives

(see page 6)

 

 

——————  Of course, you also need to be familiar with the 80×86

Inline syntax  instruction set and architecture. Even though you’re

——————  not writing complete assembly language routines, you

still need to know how the instructions you’re using

work, how to use them, and how not to use them.

 

Having done all that, you need only use the keyword asm

to introduce an inline assembly language instruction.

The format is

 

asm  opcode  operands ; or newline

 

where

 

o opcode is a valid 80×86 instruction (Table 1.0 lists

all allowable opcodes).

 

o operands contains the operand(s) acceptable to the

opcode, and can reference C constants, variables, and

labels.

 

o ; or newline is a semicolon or a new line, either of

which signals the end of the asm statement.

 

A new asm statement can be placed on the same line,

following a semicolon, but no asm statement can

continue to the next line.

 

To include a number of asm statements, surround them

with braces:

 

The initial brace   asm {

must appear on the      pop ax; pop ds

same line as the      iret

asm keyword.   }

 

Semicolons are not used to start comments (as they are

in TASM). When commenting asm statements, use C-style

comments, like this:

 

 

 

 

— 2 —

 

 

 

 

 

 

 

asm mov ax,ds;               /* This comment is OK */

asm {pop ax; pop ds; iret;}  /* This

Комментарии к записи Inline assembly language BASM (англ.) отключены

Filed under Программирование

Hello, Windows 95. Глава 2

Hello, Windows 95. Глава 2

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

Программирование для Windows — странное. Оно необычно, нестандартно, неудобно и часто запутывает. Оно абсолютно не очевидно, и может пройти немало времени, прежде чем ваши занятия завершатся победным “Эврика!” (то же самое, что студенческое “Ура, я это сделал!” — откровение, которое так любят преподаватели). Сделана обобщенная оценка, которая состоит в том, что программисты должны вытерпеть шестимесячную муку обучения, прежде чем стать сторонником составления программ для Windows, и даже после этого обучение не заканчивается и никогда не закончится. Можно только надеяться, что эта книга сократит на пару недель (а может быть на месяц, а может и на два) обычный ход обучения.

Тогда вы можете спросить: “Если программировать для Windows так трудно, зачем эти хлопоты?”

Ответ очевиден: “Вероятно, у вас нет другого выхода”. В конце концов Windows так широко проникла на рынок PC-совместимых компьютеров, что необходимость программирования для “голой” MS-DOS (неважно в символьном режиме или графике) продлится недолго. Если вы пишете коммерческие приложения для широкого круга пользователей, обозреватели журналов по программному обеспечению компьютерной техники будут фактически игнорировать ваш товар, если он не работает под Windows. Если Вы пишете узкоспециализированные программы, то вашим пользователям (и вашим нанимателям!) не понравится тот факт, что ваши программы плохо сочетаются с существующими приложениями Windows, которыми они пользуются.

Отличительная особенность Windows

Windows обладает важными преимуществами и для пользователей, и для программистов по сравнению со средой MS-DOS. Выгоды для пользователей и выгоды для создателей программ на самом деле весьма схожи, поскольку задача создателя программы состоит в том, чтобы дать пользователю то, в чем он нуждается и то, что он хочет. Windows 95 делает это возможным.

Графический интерфейс пользователя

Windows — это графический интерфейс пользователя (Graphical User Interface, GUI), иногда его еще называют “визуальный интерфейс” или “графическая оконная среда”. Концепции, давшие начало этому типу пользовательского интерфейса, берут свое начало в середине семидесятых годов, от первой работы, сделанной на Xerox Palo Alto Research Center (PARC) для таких

Комментарии к записи Hello, Windows 95. Глава 2 отключены

Filed under Программирование

Рисование текста. Глава 3

Рисование текста. Глава 3

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

Вы можете делать с рабочей областью вашей программы почти все, что захотите — все, за исключением того, что у вас отсутствует возможность задать ей определенный размер или оставить этот размер неизменным во время работы вашей программы. Если вы приспособились писать программы для MS-DOS, эти условия могут вас слегка огорчить. Вы можете больше не думать о рамках экранного пространства, т. е. о 25 (или 43, или 50) строках текста и 80 символов. Ваша программа должна делить экран с другими программами. Пользователь Windows управляет тем, как расположить на экране окна программ. Хотя вполне можно создать окно фиксированного размера (как это делается в программе калькулятора и сходных с ней программах), в подавляющем большинстве случаев размер окна — это величина переменная. Ваша программа должна учитывать размер окна и использовать рациональные способы работы с ним.

Здесь возможны два варианта. Рабочая область может оказаться недостаточной даже для того, чтобы поместилось только слово “Hello”. Точно также она может оказаться на большом экране видеосистемы с высоким разрешением, и оказаться настолько большой, что в ней могли бы поместиться две полные страницы текста и, кроме этого, на экране еще осталось бы множество участков свободного пространства. Умение разумно поступать в обеих этих ситуациях — это важная часть программирования для Windows.

Хотя в Windows имеется очень широкий набор функций графического интерфейса устройства (GDI) для вывода графики на экран, в этой главе будет рассказано только о выводе простых текстовых строк. Не будут также рассматриваться различные шрифты и их размеры, имеющиеся в Windows, и будет использоваться только системный шрифт (system font), который Windows использует по умолчанию. Этого может показаться недостаточно, но на самом деле вполне хватает. Задачи, с которыми мы в этой главе столкнемся, и которые решим, относятся к программированию для Windows в целом. Если вы выводите на экран сочетание текста и графики (как, например, это происходит в программе Windows Calculator), размеры символов, задаваемые по умолчанию системным шрифтом Windows, часто определяют и размеры графики.

На первый взгляд, эта глава посвящена тому, как научиться рисовать,

Комментарии к записи Рисование текста. Глава 3 отключены

Filed under Программирование

Главное о графике. Глава 4

Главное о графике. Глава 4

Графический интерфейс устройства (GDI) — подсистема Windows 95, отвечающая за отображение графики (включая текст) на видеотерминалах и принтерах. Как можно догадаться, GDI — очень важная компонента Windows. Не только приложения, разрабатываемые вами, активно используют GDI для отображения информации, но и Windows сама очень активно использует его для отображения элементов пользовательского интерфейса, таких как меню, полосы прокрутки, значки и курсоры мыши.

Вероятно, программисты, работающие с MS DOS и ранними версиями Windows по принципу “делаю, что хочу”, часто пользовались возможностью работать, минуя GDI, и записывать информацию непосредственно в видеопамять. Пожалуйста, никогда не помышляйте об этом. Это может доставить вам много головной боли, привести к конфликтам с другими программами Windows 95, сделать ваши программы несовместимыми с будущими версиями операционной системы.

В отличие от некоторых новых особенностей Windows 95, GDI практически не менялся с самого начала. Внутренне Windows 1.0, в основном, состояла из трех динамически подключаемых библиотек, KERNEL (ядро — обработка задач, управление памятью, файловый ввод/вывод), USER (интерфейс пользователя) и GDI. В более поздние версии Windows были включены дополнительные функциональные возможности GDI, сохраняя в основном совместимость с существующими программами, но основа GDI осталась без изменений.

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

Концепция GDI

Графика в 32-битной Windows реализуется, в основном, функциями, экспортируемыми из GDI32.DLL, динамически подключаемой библиотеки, которая часто использует 16-битную динамически подключаемую библиотеку GDI.EXE. (Динамически подключаемые библиотеки в ранних версиях Windows чаще имели расширение EXE, а не DLL). Эти модули обращаются к различным функциям драйверов отображения — .DRV файлу для видеомониторов и, возможно, к одному или нескольким .DRV файлам драйверов принтеров или плоттеров. Видеодрайвер осуществляет доступ к аппаратуре видеомонитора или преобразует команды GDI в коды или команды, воспринимаемые различными принтерами. Разные видеоадаптеры и принтеры требуют различных файлов драйверов.

Поскольку к IBM PC совместимым компьютерам может быть подключено множество различных устройств отображения, одной из основных задач GDI является поддержка аппаратно-независимой графики. Программы для Windows должны нормально работать на любых графических устройствах отображения, которые поддерживаются Windows. GDI выполняет эту задачу, предоставляя возможность отделить ваши программы от конкретных характеристик различных

Комментарии к записи Главное о графике. Глава 4 отключены

Filed under Программирование

Компьютерная графика. Введение

Компьютерная графика. Введение

Программа рисует три фигуры типа буквы V широкой линией, используя стили концов и мест соединения в порядке, указанном выше. Программа также выводит три одинаковых линии, используя стандартное черное перо. Это сделано для того, чтобы показать, насколько широкие линии отличаются от обычных тонких линий. Результат работы программы приведен на рис. 4.25.

 

Рис. 4.25.  Вид экрана программы ENDJOIN.

Есть надежда, что теперь вам стало понятно, почему Windows 95 поддерживает функцию StrokePath: Когда вы рисуете две линии отдельно, GDI рисует концы каждой из них. Если же они входят в путь, определенный в GDI, то линии рисуются с местом их соединения.

Bits and Blts

Битовые или растровые образы (bitmap) представляют собой один из двух методов хранения графической информации в программах для Windows 95. Битовый образ — это цифровое представление изображения. Каждый пиксель соответствует одному или более битам в растровом образе. Монохромные битовые образы требуют всего один бит для хранения информации об одном пикселе; цветные битовые образы требуют дополнительных битов для представления цвета каждого пикселя. Второй формой хранения графической информации является метафайл (metafile), его мы рассмотрим в этой главе позднее. Метафайл — это описание изображения, а не его цифровое представление.

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

Вû можете строить битовые образы вручную, используя программу Paint из официальной версии Windows 95. Затем вы включаете их в качестве ресурсов в файл описания ресурсов и загружаете в программу, используя функцию LoadBitmap, как показано в главе 9. В главе 10 мы увидим, как битовые образы могут использоваться вместо текста в меню. Они могут также использоваться для создания кистей.

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

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

Filed under Программирование

Клавиатура. Глава 5

Клавиатура. Глава 5

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

Клавиатура не может рассматриваться исключительно как устройство для ввода информации, изолированно от других функций программы. Например, программы часто повторяют ввод с клавиатуры путем отображения печатаемых символов в рабочей области окна. Таким образом, обработка ввода с клавиатуры и вывод текста должны рассматриваться совместно. Если вам важно адаптировать ваши программы к иностранным языкам и рынкам, вам также нужно знать о том, как Windows 95 поддерживает расширенный набор символов ASCII (коды от 128 и выше), двухбайтные наборы символов (DBCS), и поддерживаемую Windows NT 16-разрядную кодировку клавиатуры, известную как Unicode.

Клавиатура. Основные понятия

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

На самом деле все происходит не столь просто: когда пользователь нажимает и отпускает клавиши, драйвер клавиатуры передает информацию о нажатии клавиш в Windows. Windows сохраняет эту информацию (в виде сообщений) в системной очереди сообщений. Затем она передает сообщения клавиатуры, по одному за раз, в очередь сообщений программы, содержащей окно, имеющее “фокус ввода” (input focus) (о котором вскоре будет рассказано). Затем программа отправляет сообщения соответствующей оконной процедуре.

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

Для отражения различных событий клавиатуры, Windows посылает

Комментарии к записи Клавиатура. Глава 5 отключены

Filed under Программирование

Управление памятью и файловый ввод/вывод. Глава 13

Если вы впервые учитесь программированию под Windows и используете для этого Windows 95, то вы — счастливый человек. Вы даже не представляете себе, как вам повезло. В самом деле, основной урок, который вы извлечете из этой главы, можно сформулировать кратко следующим образом: при работе с памятью или файлами вам редко (а, может быть, и никогда) придется использовать что-либо кроме функций из стандартной библиотеки времени выполнения языка C.

Причина, по которой рекомендуется использовать библиотечные функции C (такие как malloc, free, fopen, fclose и т. д.), состоит в том, что они просты и понятны, и, кроме того, вероятно, вам хорошо знакомы. Но самое главное заключается в том, что у вас не возникнет никаких проблем при использовании этих функций в программах, написанных для Windows 95. Как будет показано ниже, так было далеко не всегда.

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

Набор системных услуг, поддерживаемых ядром Windows 95, гораздо более широк. Он включает в себя динамическое связывание (оно будет рассмотрено в главе 19), многозадачность, многопоточность и синхронизацию потоков (глава 14), связь между процессами (главы 16, 17 и 20), а также некоторые другие услуги, которые не включены в данную книгу.

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

Управление памятью: хорошо, плохо
и ужасно

Для того чтобы увидеть, насколько далеко продвинулась вперед Windows за последние десять лет, достаточно интересно и полезно ознакомиться с минимальными требованиями к компьютеру для работы Windows 1.0 выпуска ноября 1985 года: 320 Кбайт памяти, операционная система MS DOS 2.0 и выше, два дисковода, графическая видеокарта. Эти требования отражают тип компьютера, на котором в то время работало большинство пользователей. Оглядываясь назад, можно сказать, что Microsoft добилась совершенно уникального результата, заставив Windows работать в такой ограниченной среде. Управление памятью в Windows 1.0 было

Комментарии к записи Управление памятью и файловый ввод/вывод. Глава 13 отключены

Filed under Программирование

Использование принтера. Глава 15

Использование принтера. Глава 15

Когда в главах 3 и 4 для вывода текста и графики использовался экран дисплея, концепция независимости от устройства могла показаться совершенной и очень удобной, но насколько полно эта концепция поддерживается для принтеров и плоттеров? В Microsoft Windows 95 принтеры и плоттеры обеспечены независимым от устройства графическим интерфейсом. При программировании для принтера можно не думать о последовательности управляющих сигналов и протоколах связи с принтером. В продаваемых программах для Windows бросается в глаза отсутствие дисков со специализированными драйверами принтеров, что характерно для программ текстовых редакторов и графических программ в MS-DOS. Если в продаваемую программу для Windows включаются драйверы принтера, то это, как правило, касается модернизированных версий существующих драйверов.

Из программ для Windows можно печатать текст и графику с использованием тех же функций GDI, какие использовались для вывода на экран монитора. Многое из изученного в главах 3 и 4, что связано с концепцией независимости от устройства — в большей степени это касается размеров и разрешающей способности дисплея, а также его возможностей по воспроизведению цветов — вполне применимо и допустимо здесь. Тем не менее принтер или плоттер это не просто монитор, в котором вместо кинескопа используется бумага. Имеется несколько очень важных отличий. Например, мы никогда не думали о том, что монитор может быть не подключен к видеоадаптеру, но для принтеров аналогичная проблема вполне реальна: они могут быть либо неподключенными, либо у них может кончиться бумага.

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

Имеются и другие особенности, требующие внимания:

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

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

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

Для

Комментарии к записи Использование принтера. Глава 15 отключены

Filed under Программирование

Буфер обмена. Глава 16

Буфер обмена. Глава 16

Буфер обмена (clipboard) в Windows дает возможность передавать данные от одной программы к другой. Это относительно простой механизм, не требующий больших добавлений ни к программе, которая помещает данные в буфер обмена, ни к программе, которая в дальнейшем их получает. В Windows 95 имеется программа просмотра, в которой показывается текущее состояние буфера обмена. В большинстве программ, имеющих дело с документами или другими данными, имеется меню Edit с опциями Cut, Copy и Paste. Если пользователь выбирает опции Cut или Copy, то программа передает данные в буфер обмена. Эти данные находятся в специальном формате, например в виде текста, битового образа или метафайла. Если пользователь выбирает в меню опцию Paste, программа проверяет имеются ли в буфере обмена данные в том формате, который программа может использовать, и если да, то эти данные передаются из буфера обмена в программу.

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

Простое использование буфера обмена

Мы начнем с анализа программы для передачи данных в буфер обмена (Cut и Copy) и получения данных из буфера обмена (Paste).

Стандартные форматы данных буфера обмена

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

q CF_TEXT — оканчивающаяся нулем группа символов из набора символов ASCII, в конце каждой строки которой имеются символы возврата каретки и перевода строки. Это простейший формат данных буфера обмена. Передаваемые в буфер обмена данные хранятся в области оперативной памяти, а передаются они с помощью описателя этой области памяти. Эта область памяти становится неотъемлемой частью буфера обмена, и программа, создавшая этот блок памяти, больше не должна его использовать.

q CF_BITMAP — зависящий от устройства битовый образ. Битовый образ передается в буфер обмена с помощью описателя битового образа. И в этом случае программа, после передачи битового образа в буфер обмена, не должна его больше использовать.

q CF_METAFILEPICT — “картинка метафайла” (metafile picture). Это не совсем то же самое, что метафайл (описанный в главе 4). Скорее это метафайл, содержащий дополнительную информацию в виде небольшой структуры типа METAFILEPICT. Программа передает картинку метафайла в буфер обмена с помощью описателя области памяти, содержащего эту структуру. В структуре METAFILEPICT имеется четыре поля: mm (LONG), режим отображения метафайла; xExt (LONG) и yExt (LONG), ширина и высота образа метафайла;

Комментарии к записи Буфер обмена. Глава 16 отключены

Filed under Программирование

Динамически подключаемые библиотеки. Глава 19

Динамически подключаемые библиотеки. Глава 19

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

Основы библиотек

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

Термин динамическое связывание (dinamic linking) относится к процессам, которые Windows использует для того, чтобы связать вызов функции в одном из модулей с реальной функцией из модуля библиотеки. Статическое связывание (static linking) имеет место в процессе создания программы, когда для создания исполняемого (.EXE) файла связываются воедино разные объектные (.OBJ) модули, файлы библиотек (.LIB) и, как правило, скомпилированные файлы описания ресурсов (.RES). В отличие от этого, динамическое связывание имеет место во время выполнения программы.

Файлы KERNEL32.DLL, USER32.DLL и GDI32.DLL, файлы различных драйверов, например, KEYBOARD.DRV, SYSTEM.DRV и MOUSE.DRV, драйверы мониторов и принтеров — все это динамически подключаемые библиотеки. Эти библиотеки можно использовать во всех программах Windows.

Некоторые динамически подключаемые библиотеки (например, файлы шрифтов) содержат только ресурсы (resource only). В них содержатся только данные (обычно в виде ресурсов), и нет текстов программ. Таким образом, одной из целью существования динамически подключаемых библиотек должно быть обеспечение функциями и ресурсами, которые можно использовать во многих, совершенно разных программах. В традиционной операционной системе, только сама операционная система содержит программы, которые для решения каких-то задач могут вызывать другие программы. В Windows принцип вызова одним модулем функции из другого модуля, распространен на всю операционную систему. Это приводит к тому, что когда вы пишете динамически подключаемую библиотеку — вы пишете

Комментарии к записи Динамически подключаемые библиотеки. Глава 19 отключены

Filed under Программирование

Анимация робота-андроида. Комп. графика

Анимация робота-андроида. Комп. графика

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

 

Содержание

  1. Введение
  2. Реализация проекта

2.1.  Контент

2.2.   Архитектура продукта

2.2.1.Структура

2.2.2. Функционирование

3.   Технология реализации

4.   Заключение

5.   Список литературы

6.   Приложения

 

1. Введение

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

 

2. Реализация проекта

 

2.1. Контент

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

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

Комментарии к записи Анимация робота-андроида. Комп. графика отключены

Filed under Программирование

Алгоритмы решения задач на графах и сетях

I. ОСНОВНЫЕ ОПРЕДЕЛЕНИЯ ТЕОРИИ ГРАФОВ

Будем придерживаться терминологии из [1].

Ориентированным графом (орграфом) G=(Х, Г) называется пара (X, Г) , где X – множество элементов, называемых вершинами,

а Г -многозначное отображение Х =>Х . Многозначное отображение Х=>Х есть закон, по которому каждому элементу x принадлежащему Х ставится .в соот­ветствие некоторое подмножество Гx множества Х . Дугами орграфа называется упорядоченные пары (x, y) принадлежащие Х*Х, y Î Гх. Если обо­значить через U множество всех дуг графа, то граф можно определить, как G= (X,U ) Вершина x называется началом дуги u = ( x , y ),  а вершина y – ее концом. Дуга ( x , x ) , начало и конец которой совпадают, называется петлей. Две различные вершины x и y на­зываются смежными, если существует соединяющая их дуга.

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

Путем L (a, б) из вершины а, в вершину b называется после­довательность вершин и дуг a, (a, x1), x1, (x1, x2)…,(xn-1, b),b. Заметим, что в орграфе путь однозначно определяется последователь­ностью вершин или дуг. Путь называется простым, если вершины не, повторяются. Если существует путь L(a, 6) , то говорят, что вер­шина b достижима из вершины a . Орграф называется связным,  если для любой пары вершин одна достижима из другой.

Путь L (a, a), начала и конец которого совпадают, называет­ся контуром.

Пусть X1, X2 Ì

Комментарии к записи Алгоритмы решения задач на графах и сетях отключены

Filed under Программирование

Подставляемые (inline) функции

Подставляемые (inline) функции

Подставляемые (inline) функции

C++ имеет еще одну важную черту, которой нет в языке С. Это подставляемые функции (inline function). Подставляемые функции не вызываются как обычные функции языка C++. В машинный код программы вставляется код, соответствующий этой функции. Это как бы параметризированная макроподстановка, но уже на процессе компиляции.

Существует два способа создания inline-функций. В первом используется модификатор inline. Например,

inline int f(void)

{

}

т.е. перед объявлением функции ставится модификатор inline. Он предшествует всем другим модификаторам. Причина введения таких функций – повышение эффективности работы программы. Каждый раз, когда происходит вызов функции, выполняется несколько действий, включая пересылку параметров в стек и возврат значения функции. Требуется несколько тактов процессора (может быть достаточно много) для выполнения этих действий. Когда же используется inline-функция, на вызов такой функции время не тратится, соответственно, возрастает скорость выполнения программы. Но возрастает и размер кода программы, особенно если функция достаточно большая. Таким образом, лучше использовать inline-функцию тогда, когда функция очень маленькая. Большие по размеру функции рекомендуется вызывать обычным образом.

Рассмотрим пример:

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

 

class _class

{

int i;

public:

int get_i(void);

void put_i(int j);

};

 

inline int _class::get_i(void)

{

return i;

}

 

inline void _class::put_i(int j)

{

i=j;

}

 

void main (void)

{

_class s;

 

s.put_i(10);

 

cout << s.get_i();

}

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

  • содержит циклы,
  • операторы switch, goto
  • или возвращает значение более одного раза.

Inline-функции не могут быть рекурсивными или содержать статические (static) переменные.

Функция, имеющая модификатор inline, может быть как функцией-членом какого-либо класса, так и обычной функцией.

Другой способ создания подставляемых функций в языке C++ состоит в описании функции внутри объявления шаблона класса. Любая функция, определенная внутри шаблона класса, автоматически делается inline-функцией. Поэтому нет необходимости предварять ее определение ключевым словом inline.

Например:

#include <stdio.h>

#include <conio.h>

#include <iostream.h>

 

class _class

{

int i;

public:

int get_i(void)

{

return i;

}

void put_i(int j)

{

i=j;

}

};

 

void main (void)

{

_class s;

 

s.put_i(10);

 

cout << s.get_i();

}

Этот пример написан в стиле языка C++. В C++ короткие функции обычно определяются, как в этом примере, внутри класса.

Комментарии к записи Подставляемые (inline) функции отключены

Filed under Программирование

«Интерактивные технологии»: скриптовое программирование

«Интерактивные технологии»: скриптовое программирование

Объекты и события

Язык JavaScript, подобно большинству современных язы­ков программирования (предназ­наченных для создания Windows-приложений), является по своей идеологии «объектно-событийным». Это означает, что создаваемое приложение (в нашем случае таковым является загруженная в окно браузера Web-страница) рассматрива­ется как иерархическая  совокупность обособлен­ных объектов, каждому из которых присвоено собственное имя и определенный набор параметров (свойств), значения которых можно считывать в назначенные для этого перемен­ные для использования в программе. А во многих случаях  и программно изменять, меняя тем самым состояние самого объекта на экране.

Типичным примером является страница, содержащая в себе форму с флажком: здесь главным является объект «окно браузера» (window); в нем в качестве вложенно­го объекта рассматривается его содержимое — HTML-доку­мент (document); в него вложена, среди прочих объектов (поименованных абзацев,  гиперссылок, других форм и т.п.) наша форма, в которую, в свою очередь, вложен флажок, и он имеет среди прочих свойств значение (value). В этом случае для доступа к значению одного из пунктов списка по­требуется записать всю иерархию вложений через десяти­чную точку, например:

 

х  =  window.document.MyForm.MyCheckbox.value

Когда речь идет о содержимом того же самого документа, в котором содержится скрипт, слово window можно опустить, если только речь не идет о свойствах или объектах окна, а не  документа. В последнем случае,  важно обратить внимание на то, что «с точки зрения» JavaScript окно браузера,  содержащее Web-страни­цу, и сама эта страница,  рассматриваются как разные объекты.  Если нам нужно работать с параметрами окна (его размерами, выводом линеек про­крутки и пр.), то необходимо указывать в качестве объекта win­dow, если же с параметрами именно самой Web-страницы (как единого целого либо ее отдельных составляющих), то речь должна идти уже об объекте document.

Имена объектов обычно указываются в составе опреде­ляющих их тэгов (параметр NAME, например, для форм и их элементов, фреймов и пр., или параметр ID, добавляемый, в частности, в состав тэга <Р>, чтобы выделить соответст­вующий абзац текста как отдельный объект). Объекты с именем, указанным в качестве значения параметра NAME, обычно считаются типичными для HTML и в строке доста­точно указать их имена; если же имя указывается в каче­стве значения параметра ID, то обращение к таким объек­там производится через запись all («все содержимое документа»), например:

 

х  =  document.all.myparag.<свойство>

для доступа к указанному свойству абзаца, в состав  тэга <Р> которого включен параметр ID=”myparag”. Аналогично, через document .all обращение производится и к поименованным (параметр NAME), но не заключенным

Комментарии к записи «Интерактивные технологии»: скриптовое программирование отключены

Filed under Программирование