Вопросы программирования



   порно наталья       искать туры | отзывы хургада   вот ссылка   Порно транс трахает транса e-batsa.pro    20% off Deluxe Checks Coupon

Пособие по практике программирования

Приходилось ли вам когда-нибудь:

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

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

Введение

Стиль
Принципы хорошего стиля программирования состоят вовсе не в наборе каких-то обязательных правил, а в здравом смысле, исходящем из опыта. Код должен быть прост и понятен: очевидная логика, естественные выражения, использование соглашений, принятых в языке разработки, осмысленные имена, аккуратное форматирование, развернутые комментарии, а также отсутствие хитрых трюков и необычных конструкций. Логичность и связность необходимы, потому что другим будет проще читать код, написанный вами, а вам, соответственно, — их код, если все будут использовать один и тот же стиль. Детали могут быть продиктованы местными соглашениями, требованиями менеджмента или самой программой, но даже если это не так, то лучше всего подчиняться наиболее распространенным соглашениям. Мы в своем повествовании будем придерживаться стиля, использованного в книге "Язык программирования С" с некоторыми поправками для C+ + и Java.

Стиль
Имена
Выражения
Стилевое единство и идиомы
Макрофункции
Загадочные числа
Комментарии
Стоит ли так беспокоиться?

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

Алгоритмы и структуры данных
Поиск
Сортировка
Библиотеки
Быстрая сортировка на языке Java
"О большое"
Динамически расширяемые массивы
Списки
Деревья
Хэш-таблицы

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

Проектирование и реализация
Алгоритм цепей Маркова
Варианты структуры данных
Создание структуры данных в языке С
Генерация вывода
Java
C++
Awk и Perl
Производительность
Уроки

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

Интерфейсы
Значения, разделенные запятой
Прототип библиотеки
Библиотека для распространения
Реализация на C++
Принципы интерфейса
Управление ресурсами
Abort, Retry, Fail?
Пользовательские интерфейсы
Дополнительная литература

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

Отладка
Отладчики
Хорошие подсказки, простые ошибки
Трудные ошибки, нет зацепок
Последняя надежда
Невоспроизводимые ошибки
Средства отладки
Чужие ошибки
Заключение
Дополнительная литература

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

Тестирование
Тестируйте при написании кода
Систематическое тестирование
Автоматизация тестирования
Тестовые оснастки
Стрессовое тестирование
Полезные советы
Кто осуществляет тестирование?
Тестирование программы markov
Заключение

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

Производительность
Узкое место
Замеры времени и профилирование
Стратегии ускорения
Настройка кода
Эффективное использование памяти
Предварительная оценка
Заключение

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

Переносимость
Язык
Заголовочные файлы и библиотеки
Организация программы
Изоляция
Обмен данными
Порядок байтов
Переносимость и внесение усовершенствований
Интернационализация
Заключение

Нотация
Преимущества хорошей нотации — способа записи — появляются при переходе от традиционного программирования к узкоспециальным проблемным областям. Регулярные выражения позволяют использовать компактные (из-за этого подчас превращающиеся в тайнопись) описания классов строк. Язык HTML позволяет определять внешний вид интерактивных документов, нередко используя встроенные программы на других языках, вроде JavaScript. PostScript рассматривает целый документ — например эту книгу — как стилизованную программу. Электронные таблицы и текстовые процессоры часто содержат в себе языки программирования типа Visual Basic, они используются для вычисления выражений, доступа к информации, управления размещением данных в документе.

Нотация
Форматирование данных
Регулярные выражения
Программируемые инструменты
Интерпретаторы, компиляторы и машины
Программы, которые пишут программы
Использование макросов для генерации кода
Компиляция "на лету"
Дополнительная литература
Эпилог

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

Приложение: свод правил
Стиль
Интерфейсы
Отладка
Тестирование
Производительность

Цвет и цветовоспроизведение

Действие на органы зрения излучений, длины волн которых находятся в диапазоне 400—700 нм, приводит к возникновению зрительных ощущений. Эти ощущения различа­ются, количественно и качественно. Их количественная характеристика называется светлотой, качественная -цветностью. Физические свойства излучения — мощность и длина волны — тесно связаны со свойствами возбуждаемого им ощущения. С изменением мощности изменяется светлота, а с изменением длины волны — цветность.
Первоначальное представление о светлоте и цветности можно проиллюстрировать, поместив окрашенную поверхность частично на прямой солнечный свет, а частично — в тень. Обе части ее имеют одинаковую цветность, но разную светлоту.
Совокупность этих характеристик обозначается термином «цвет». Строгое определение термина можно дать только после излучения свойств цветового ощущения. Однако целесообразно в начале курса дать определение, понимание которого не требует предварительной подготовки. Оно предложено известным физиком Шредингером (1920 г.). По Шредингеру, цвет есть свойство спектральных составов излучений, не различаемых человеком визуально.
В связи с ролью цветовых ощущений в жизни и деятельности человека возникла наука о цвете — теория цвета, или цветоведение. Она изучает круг вопросов, связанных с оп­тикой и физиологией зрения, психологией восприятия цвета, а также теоретические основы и технику измерения к воспроизведения цветов.
Так как причиной возникновения цветового ощущения является действие света, то один из разделов теории цвета— физика цвета — рассматривает свойства света, главным образом распределение светового потока по спектрам испускания и отражения, а также способы получения этих спектров, аппаратуру и приемники излучения.

Цвет и объекты изучаемые теорией цвета
Действие на органы зрения излучений, длины волн которых находятся в диапазоне 400—700 нм, приводит к возникновению зрительных ощущений. Эти ощущения различаются, количественно и качественно. Их количественная характеристика называется светлотой, качественная -цветностью. Физические свойства излучения — мощность и длина волны — тесно связаны со свойствами возбуждаемого им ощущения. С изменением мощности изменяется светлота, а с изменением длины волны — цветность

Схема строения глаза 1 - склера;
Схема движений глаза
Световая и спектральная чувствительность глаза
Схема простейшего фотометра
Кривые относительной спектральной
Кинетика яркостной адаптации
Зрительная инерция
Общие сведения
Кривые основных возбуждений
Субъективные характеристики цвета

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

Градационные графики частичных
Графики зависимости эффективных
Система градационных графиков
Требования к маскам и методы маскирования
Схема определения плотностей масок
Реальная и идеальная маски для желтого негатива
Реальная маска для пурпурного негатива
Коррекция желтого негатива масками
Коррекция пурпурного негатива масками
Масковые негативы с фотографирования

CAN протоколы высокого уровня

Рассмотрим основные возможности, которые предоставляют протоколы высокого уровня:
система назначения идентификатора для сообщения
метод обмена данных процесса
прямая(peer-to-peer) связь
метод установления связей для обмена данных процесса
сетевое управление
Модели и профайлы устройств

Основные возможности протоколов на базе CAN
Идентификаторы сообщений
Обмен данных процесса
Device Net Transport Classes
Вызов (triggering) сообщений
Установление соответствий для объектов
Прямые (peertopeer) коммуникационные каналы
DeviceNet Fragemented Explicit Message
Установление связей для обмена данных
Сетевое управление

Программирование для IBM OS2

Если вы раньше программировали только для операционной системы MS-DOS , то вы уже создавали текстовые приложения. В составе MS-DOS нет удобных средств для организации текстового или графического вывода, поэтому большинство программ MS-DOS работают напрямую с видеопамятью, физически расположенной на плате видеоадаптера.
Операционная система IBM OS/2 Warp использует защищенный режим работы процессора, причем в большинстве случаев приложениям запрещается обращаться к портам периферийных устройств и видеопамяти в обход соответствующих драйверов. Это ограничение, однако, с лихвой компенсируется удобными и быстродействующими функциями, доступными приложениям в рамках программного интерфейса IBM OS/2 Warp. Поэтому в целом программирование экранного вывода для текстового режима IBM OS/2 Warp заметно проще, чем для операционной системы MS-DOS .

Базовые понятия и определения
Если вы программировали только для MS-DOS и никогда не создавали приложений для операционной системы Microsoft Windows, то самое трудное для вас будет перейти от обычного, линейного программирования к событийно-управляемому. Однако мы постараемся по возможности облегчить такой переход. Для этого мы рассмотрим очень подробно принципы событийно-управляемого программирования на конкретном примере исходных текстов простейшего приложения Presentation Manager.

Базовые понятия и определения
Окна в приложениях Presentation Manager
Функция окна
Сообщения
Сообщения - 2
Фокус ввода
Цикл обработки сообщений
Структура приложения Presentation Manager
Инициализация приложения
Создание очереди сообщений

Глобальные переменные
В переменные cxPoint и cyPoint записываются координаты курсора мыши в момент, когда пользователь начинает перемещение окна приложения, нажав левую кнопку мыши. Эти координаты будут затем сравниваться с координатами курсора мыши после завершения процесса перемещения, которые хранятся в переменных cxNewPoint и cyNewPoint.

Функция main
Функция окна WndProc
Сообщение WM_CREATE
Сообщение WM_DESTROY
Сообщение WM_SIZE
Сообщение WM_PAINT
Сообщение WM_BUTTON1DOWN
Сообщение WM_BUTTON1UP
Сообщение WM_MOUSEMOVE
Сообщение WM_BUTTON1DBLCLK

Файл slider.h
Файл slider.h содержит определения константы ID_APP_FRAMEWND, а также идентификаторов круглых регуляторов цвета CIRCSLD1_ID, CIRCSLD2_ID и CIRCSLD3_ID.

Файл slider.h
Файл slider.rc
Файл slider.def
Литература

Учебник по созданию shareware программ

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

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

Что такое shareware?
Shareware — это тип программного обеспечения, обусловленный особенностями распространения таких программ. В русском языке этот термин интерпретируется как "условно-бесплатное программное обеспечение". Такая длинная формулировка, естественно, не совсем удобна для частого применения, поэтому термин "shareware" используется и в русскоязычной литературе. Употребляется еще одно наименование этого типа программного обеспечения -"пробное" (trial).

Freeware и другие
Freeware
Public domain software
Open Source
Commercialcc
Demo
Adware
Главное окно программы FlashGet
Donationware
Postcardware или Cardware

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

Какую программу писать
Выбор названия программы
Delphi Basic или С
Microsoft Visual C++
Borland Delphi
Microsoft Visual Basic

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

Окно About sharewareпрограммы
Какие права есть у программиста
Лицензионное соглашение
Может ли ваш босс отнять у вас программу

Как работает правильная программа
"Стоп!" - скажут опытные программисты. — Не имеет значения, каков размер файла программы, важно, каков размер данных, используемых программой!" Абсолютно верно. Программа, ЕХЕ-файл которой имеет объем, например, всего 300 Кбайт, будучи запущенной, займет в оперативной памяти в несколько раз больше места.

Размер имеет значение
Рекомендация применения downloadменеджеров
Поменьше эгоизма
Не трогайте системные файлы и настройки
Программа WinZip поместила свои
Инсталлятор архиватора WinZip
Относитесь к пользователю с уважением
Не делайте из программы культа
Мудрое хранение настроек
Продуманная локализация

Пользовательский интерфейс
Один из самых частых вопросов, которые задают в конференциях начинающие shareware-авторы — нужно ли делать для программы красивый пользовательский интерфейс? Опытные разработчики единодушны в своем мнении: привлекательный интерфейс программе просто необходим!

Основы построения интерфейсов
Разработчики Microsoft Internet
Microsoft Access запрашивает подтверждение
Последовательность и стандарты
Однаединственная форма "нетрадиционной
Предупреждение ошибок
Понимание лучше чем запоминание
Гибкость и эффективность использования
Меню Файл с командами вызова файлов
В меню сначала показываются часто

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

Зачем нужна защита
Напоминание о регистрации архиватора WinZip
Виды защиты
Демоверсия
Ограниченная по времени версия
Напоминание в текстовом редакторе
Функционально ограниченная версия
Хакеры и крякеры
Реализация защиты и ее взлом
Кодогенератор к WinZip

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

Один из самых крупных интернетархивов
Виды документации
Текстовый файл
WinHelp
Пример справочной системы - WinHelp
HTML Help
Пример справочной системы - HTML Help
NetHelp — аналог HTML Help от компании Netscape
Adobe Acrobat
Пример документации в формате Adobe Acrobat

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

Периодичность выпуска
Номера версий
Borland Delphi позволяет определять
Сложные номера версий
Создание инсталлятора
Окно программыинсталлятора
Текст "оберточной лицензии" в окне инсталлятора
Демонстрация текста лицензионного соглашения
Папка для установки по умолчанию
Создание ярлыков в Главном меню

Ваша программа в Интернете
Самый распространенный способ представления программы в Интернете -ее размещение на Web-сайте разработчика. Автор программы регистрируется на одном из многочисленных сервисов (платном или бесплатном), предоставляющих хостинг (т. е. размещение) Web-сайтов в Интернете, получает для него имя по своему желанию, создает на сайте страницы с информацией о своих программах и, наконец, загружает на сервер дистрибутивы.

Webсайт одной из shareware компаний
Где и как разместить сайт
Страна размещения Webсервера
Лимит трафика
Техническая поддержка
Организация почтового сервиса
Поддержка доменов и поддоменов
Статистика посещений
Поддержка CGIскриптов
Поддержка SSI

Организация продаж и маркетинг
Итак, первая версия вашей shareware-программы создана, к ней написана справочная система, дистрибутив загружен на виртуальный сервер, специально зарегистрированный у надежного коммерческого хостинг-провайдера. Словом, ваша программа готова к продажам на мировом shareware-рынке. Однако остается еще один важный вопрос — как же будет происходить процедура поступления денег от покупателей программы к автору shareware-программы?

Самостоятельный прием платежей
Регистраторы
Что такое "регистратор"
Главная страница сайта регистратора RegNow
Выбираем регистратора
Отсутствие начального взноса
Качественная защита от фраудов
Большой выбор способов оплаты регистрации
Программу можно оплатить пятью способами
Отсутствие штрафов за chargeback

Приложение
Объединения разработчиков shareware
Информационные ресурсы о shareware
Проектирование интерфейсов
Защита программ
Документация
Домены и хостинг
Регистраторы
Идентификация пользователей
Продвижение
Другие ресурсы

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

Стили и методы программирования

Программирование на языках появилось одновременно с вычислительными машинами. Конрад фон Цузе, построивший первую в мире серию программно-управляемых вычислительных машин (Германия, 1938-1944 г.), создал язык Plankalkul для записи программ. Квалифицированные сотрудники писали программы на этом языке, а техники затем вручную переводили их в машинные коды. Сейчас наиболее широко используются традиционные языки. В их число входят FORTRAN, Pascal, C/C++, Ada, Java и т. п.

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

Сравнение программ на разных языках
Работа программной системы над текстом
Работа программной системы над текстом - 2
Работа программной системы над текстом - 3

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

Традиционная модель
Традиционная модель - 2
Традиционная модель - 3
Традиционная модель - 4
Модификации традиционной архитектуры
Модификации традиционной архитектуры - 2
Модификации традиционной архитектуры - 3
Нетрадиционные архитектуры
Нетрадиционные архитектуры - 2
Нетрадиционные архитектуры - 3

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

Примеры традиционных языков
Примеры традиционных языков - 2
Примеры традиционных языков - 3
Примеры традиционных языков - 4
Примеры традиционных языков - 5
Примеры традиционных языков - 6
Примеры традиционных языков - 7
Примеры традиционных языков - 8
Примеры традиционных языков - 9
Примеры традиционных языков - 10

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

Различные стороны определения языка
Различные стороны определения языка - 2
Синтаксис
Синтаксис - 2
Семантика
Прагматика
Прагматика - 2
Прагматика - 3
Прагматика - 4
Абстрактный и конкретный синтаксис

Конкретизация
Язык Рефал был создан В. Ф. Турчиным для программирования символьных преобразований. Исходный толчок он получил от идеи алгорифмов Маркова, но эта идея была полностью пересмотрена в ходе работы по созданию языка. Идейный и математический уровень проработки языка исключительно высокий, но вопросы дизайна почти проигнорированы.

Структура данных
Структура данных - 2
Структура данных - 3
Модель вычислений и Рефал-программа
Алгоритм объектного выражения E с образцом P
Общие требования к отображению P на E
Правила отображения
Правила отображения - 2
Правила отображения - 3
Дополнительные возможности

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

Поле зрения, памяти и PROLOG-программа
Поле зрения, памяти и PROLOG-программа - 2
Поле зрения, памяти и PROLOG-программа - 3
Поле зрения, памяти и PROLOG-программа - 4
Управление исполнением программы
Управление исполнением программы - 2
Управление исполнением программы - 3
Управление исполнением программы - 4
Управление исполнением программы - 5
Управление исполнением программы - 6

Развитие языка Prolog
Наличие именно формальной мотивировки оказало медвежью услугу языку Prolog и всему направлению. Его сущность оказалась замаскирована примитивным методологически-теоретическим анализом и неадекватным названием: логическое программирование. Prolog вдохновлялся ограничением классического исчисления предикатов, предложенным Хорном.

Развитие языка Prolog
Развитие языка Prolog - 2
Развитие языка Prolog - 3
Развитие языка Рефал и его диалекты
Развитие языка Рефал и его диалекты - 2
Версии сентенциального программирования
Версии сентенциального программирования - 2
Версии сентенциального программирования - 3
Версии сентенциального программирования - 4
Версии сентенциального программирования - 5

Списки и функциональные выражения
Атомами в языке LISP являются числа, имена, истина T. Ложью служит пустой список NIL, который в принципе атомом не является, но в языке LISP при проверке на то, является ли он атомом, выдается истина. Точно так же выдается истина и при проверке, является ли он списком. Однако все списковые операции применимы к NIL, а те, которые работают с атомами, часто к нему неприменимы.

Списки и функциональные выражения - 2
Поле зрения и поле памяти
Модель вычислений LISP
Модель вычислений LISP - 2
Модель вычислений LISP - 3
Модель вычислений LISP - 4
Модель вычислений LISP - 5
Модель вычислений LISP - 6
Добавления и порождение программ
Добавления и порождение программ - 2

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

Автоматные задачи
Автоматные задачи - 2
Автоматные задачи - 3
Структуры автоматного программирования
Структуры автоматного программирования - 2
Программные представления графа состояний
Методы действий в состояниях и на переходах
Постановка задачи и первичный анализ
Построение графа состояний
Построение графа состояний - 2

Анализ состояния дел
Построение таблиц заканчивает этап спецификации нашей программы. Таблицы 9.1 и 9.2-другое формализованное представление рисунков 9.6 и 9.7. Как всегда, разные формализмы отличаются по практической направленности. Граф в некоторых случаях может быть автоматизированно преобразован в прототип программы (попытайтесь сами проделать это со спецификацией на языке UML), но получающиеся программы всегда требуют ручной доработки. Табличное же представление допустимо рассматривать как мини-язык программирования.

Анализ состояния дел
Анализ состояния дел - 2
Ручная трансляция таблиц переходов
Ручная трансляция таблиц переходов - 2
Ручная трансляция таблиц переходов - 3
Ручная трансляция таблиц переходов - 4
Ручная трансляция таблиц переходов - 5
Ручная трансляция таблиц переходов - 6
Автопреобразование таблиц переходов
Автопреобразование таблиц переходов - 2

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

Требования к автоматической трансляции таблиц
Постановка задачи
Постановка задачи - 2
Постановка задачи - 3
Постановка задачи - 4
Постановка задачи - 5
Постановка задачи - 6
Постановка задачи - 7

Пример

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

Событие, сообщение, демон
Событие, сообщение, демон - 2
Событие, сообщение, демон - 3
Событие, сообщение, демон - 4
Программирование от приоритетов
Программирование от приоритетов - 2
Программирование от приоритетов - 3
Программирование от приоритетов - 4

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

Характеристика программирования
Характеристика программирования - 2
Характеристика программирования - 3
Характеристика программирования - 4
Сети данных
Сети данных - 2
Сети данных - 3
Сети данных - 4
Выбор
Выбор - 2

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

Виды параллелизма
Виды параллелизма - 2
Виды параллелизма - 3
Взаимодействие процессов
Взаимодействие процессов - 2
Взаимодействие процессов - 3
Взаимодействие процессов - 4
Взаимодействие процессов - 5
Взаимодействие процессов - 6
Взаимодействие процессов - 7

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

Что нужно для переиспользования
Что нужно для переиспользования - 2
Что нужно для переиспользования - 3
Что нужно для переиспользования - 4
Переиспользование и стили
Переиспользование и стили - 2
Переиспользование и стили - 3
Переиспользование и стили - 4
Переиспользование и стили - 5
Программирование от образцов

Почему нет универсальных методов?
К сожалению, из курсов наших университетов (как это обычно бывало во времена кризиса России) практически исчезла исключительно важная для мировоззрения и просто общей культуры наука: логика. Этот факт особенно прискорбен потому, что за XX век логика заставила научное мировоззрение перейти на качественно новый уровень1). Она впервые заставила науку задуматься над границами собственных возможностей.

Почему нет универсальных методов?
Почему нет универсальных методов? - 2
Стили, их ипостаси, методологии, методики
Стили, их ипостаси, методологии, методики - 2
Стили, их ипостаси, методологии, методики - 3
Стили, их ипостаси, методологии, методики - 4
Стили, их ипостаси, методологии, методики - 5
Стили и как они взаимодействуют?
О сочетании стилей
О сочетании стилей - 2

Модель зрелости процессов разработки программного обеспечения

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

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

Поведенческие характеристики уровней зрелости
Уровень – начальный уровень
Уровень – повторяемый уровень
Уровень – определенный уровень
Уровень – управляемый уровень
Уровень – оптимизирующий уровень
Понимание концепций уровней зрелости
Понимание концепции начального уровня
Повторяемый и определенный уровень
Понимание управляющего уровня

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

Проверка внедрения
Обеспечение качества ПО
Цели
Обязательства по выполнению
Необходимые предпосылки
Выполняемые операции
Выполняемые операции - 2
Выполняемые операции - 3
Измерения и анализ
Проверка внедрения

SW-CMM (Модель зрелости процессов разработки ПО)

Одной из наиболее популярных, востребованных и весомых методик на сегодняшний день является модель построения зрелых процессов разработки программного обеспечения SW-CMM (Capability Maturity Model for Software). До сих пор эта модель, разработанная Институтом программной инженерии при Университете Карнеги-Меллон (США), была почти неизвестна в России. Основной причиной этого было отсутствие материалов по этому стандарту на русском языке.
Данный перевод текстов стандарта SW-CMM призван устранить этот пробел и предназначается для всех ИТ специалистов: топ-менеджеров компаний, руководителей проектов, а также рядовых разработчиков. Мы надеемся, что изложенный в книге материал о модели SW-CMM и изложенный в ней опыт успешных и развитых компаний помогут отечественным специалистам повысить эффективность своей работы, выстроить процессы разработки ПО в соответствии с современными требованиями рынка, лучше взаимодействовать с заказчиками и отвечать их запросам.

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

Уровни зрелости
Группы ключевых процессов
Группы ключевых процессов - 2
Группы ключевых процессов - 3
Группы ключевых процессов - 4
Группы ключевых процессов - 5
Группы ключевых процессов - 6
Разделы
Обязательства по выполнению
Необходимые предпосылки

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

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

Программирование модемов

В последнее время модемы все чаще становятся неотъемлемой частью компьютера. Установив модем на свой компьютер, вы фактически открываете для себя новый мир. Ваш IBM PC превращается из обособленного компьютера в звено глобальной сети.
Модем позволит вам, не выходя из дома (буквально не вставая из-за стола), получить доступ к базам данных, которые могут быть удалены от вас на многие тысячи километров, разместить сообщение на BBS (электронной доске объявлений), доступной другим пользователям, скопировать с той же BBS интересующие вас файлы, интегрировать домашний компьютер в сеть вашего офиса, при этом (не считая низкой скорости обмена данными) создается полное ощущение работы в сети офиса. Кроме того, воспользовавшись глобальными сетями (Relcom, FidoNet) можно принимать и посылать электронные письма не только внутри города, но фактически в любой конец земного шара. Например, вы можете отправить сообщение президенту фирмы Microsoft, если вы считаете, что он им заинтересуется. Глобальные сети дают возможность не только обмениваться почтой, но и участвовать во всевозможных конференциях, получать новости практически по любой интересующей вас тематике.

Последовательный асинхронный адаптер
Практически каждый компьютер оборудован хотя бы одним последовательным асинхронным адаптером. Обычно он представляет собой отдельную плату или же расположен прямо на материнской плате компьютера. Его называют еще асинхронным адаптером RS-232-C, или портом RS-232-C. Каждый асинхронный адаптер обычно содержит несколько портов RS-232-C, через которые к компьютеру можно подключать внешние устройства

Порты асинхронного адаптера
Регистр данных
Регистр управления прерываниями
Регистр идентификации прерывания
Управляющий регистр
Регистр управления модемом
Регистр состояния линии
Регистр состояния модема
Регистр состояния модема - 2
Регистр состояния модема - 3

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

Протоколы коррекции ошибок нижнего уровня
MNP-протоколы
MNP-протоколы - 2
Режимы MNP-модемов
Команды модемов с протоколом MNP
Команды модемов с протоколом MNP - 2
Команды модемов с протоколом MNP - 3
Протоколы V.42 и V.42 bis
Протоколы передачи файлов
ASCII

Индустрия программирования

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

Механизмы межпроцессных взаимодействий в операционной системе Unix
Избыточный набор системных средств, предназначенных для обеспечения возможности взаимодействия и синхронизации процессов, которые не обязательно связаны отношением родства IPC - Inter-Process Communication Facilities с появлением UNIX System V Release 4.0 все эти средства были узаконены и вошли в фактический стандарт ОС UNIX современного образца в разных вариантах системы средства IPC реализуются по-разному эффективность реализации различается усложняется разработка мобильных асинхронных программных комплексов

Разделяемая память
Семафоры
Семафоры - 2
Очереди сообщений
Организация очередей сообщений
Программные каналы
Программные гнезда (sockets)
Одна из конфигураций программных гнезд
Одна из конфигураций программных гнезд - 2
Одна из конфигураций программных гнезд - 3

Сложные проекты на базе современных информационных технологий
Информационная система LIBWEB будет представлять собой информационно-поисковую библиографическую систему; количество выходных форм - несколько десятков (во всех основных библиографических стандартах); источник данных в информационной системе - библиографические описания монографий, сборников, журналов и другой печатной продукции; для реализации будут параллельно использоваться СУБД ORACLE

Интеграция СУБД в глобальную сеть Internet
Стандартные интерфейсы WWW серверов
Технология ODBC доступа к базам данных
Технология ODBC доступа к базам данных - 2
Стандарт DDE взаимодействие в Windows
Архитектура системы
Интерфейс общения с пользователем Internet
Передача данных от пользователя к обработчику
Серверные и клиентские приложения
Серверные и клиентские приложения - 2

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

Программы и программное обеспечение
Определение (ГОСТ)
Программа - это данные, предназначенные для управления конкретными компонентами системы обработки информации (СОИ) в целях реализации определенного алгоритма.
Определения даются по: ГОСТ 19781-90. Обеспечение систем обработки информации программное. Термины и определения. - М.:Изд-во стандартов, 1990.
Обратить внимание: программа - это данные. Один из основных принципов машины фон Неймана - то, что и программы, и данные хранятся в одной и той же памяти. Сохраняемая в памяти программа представляет собой некоторые коды, которые могут рассматриваться как данные. Возможно, с точки зрения программиста программа - активный компонент, она выполняет некоторые действия. Но с точки зрения процессора команды программы - это данные, которые процессор читает и интерпретирует. С другой стороны программа - это данные с точки зрения обслуживающих программ, например, с точки зрения компилятора, который на входе получает одни данные - программу на языке высокого уровня (ЯВУ), а на выходе выдает другие данные - программу в машинных кодах.

Программы и программное обеспечение
Системное программирование
Этапы подготовки программы
Ассемблеры
Предложения языка Ассемблера
Операнды команд
Директивы
Структуры (базы) данных Ассемблера
Алгоритмы работы Ассемблеров
Двухпроходный Ассемблер 1й проход

Основы программирования

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

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

Общее понятие алгоритма
Алгоритмические языки
Алгоритмические языки - 2
Алгоритмические языки - 3
Управляющие конструкции языка
Управляющие конструкции языка - 2
Управляющие конструкции языка - 3
Управляющие конструкции языка - 4

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

Целочисленные переменные
Кольцо вычетов по модулю m
Кольцо вычетов по модулю m - 2
Интерпретация чисел
Интерпретация чисел - 2
Вещественные переменные
Вещественные переменные - 2
Машинный эпсилон
Машинный эпсилон - 2
Запись вещественных констант

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

Символьные переменные
Символьные переменные - 2
Логические переменные и выражения
Логические переменные и выражения - 2
Массивы
Текстовые строки

Значения "минус" и "плюс бесконечность"
Как реализовать воображаемые элементы "минус бесконечность" и "плюс бесконечность" при программировании на конкретных алгоритмических языках, а не на псевдокоде? Вспомним, что компьютер может представлять не все возможные числа, а только их ограниченное подмножество. Поэтому для компьютера существует минимальное и максимальное целое и вещественное числа. В языке Си эти константы записаны в стандартных заголовочных файлах "limits.h" для целочисленных типов и "float.h" для вещественных типов

Значения "минус" и "плюс бесконечность"
Схема Горнера
Арифметический цикл
Индуктивные функции на последовательностях

Алгоритм Евклида вычисления наибольшего общего делителя
Пусть даны два целых числа m и n, хотя бы одно из которых не равно нулю. Требуется найти их наибольший общий делитель. Напомним, что наибольшим общим делителем двух чисел m и n называется такой их общий делитель d, который делится на любые другие общие делители d'. Такое определение НОД подходит не только для чисел, но и для многочленов, поскольку в нем не используется сравнение по величине.

Общая схема
Алгоритм Евклида
Алгоритм Евклида - 2
Быстрое возведение в степень
Вычисление логарифма без разложения в ряд
Расширенный алгоритм Евклида
Расширенный алгоритм Евклида - 2
Нахождение корня функции

Устройство компьютера
Компьютер - это универсальный исполнитель, который умеет управлять другими исполнителями и обладает собственной внутренней памятью. Запись алгоритма для компьютера называется программой. Все современные компьютеры построены по так называемой фон-Неймановской архитектуре: программа хранится в памяти компьютера, так же как и данные.

Оперативная память
Оперативная память - 2
Процессор
Процессор - 2
Процессор - 3
CISC и RISC-процессоры
Алгоритм работы компьютера
Аппаратный стек
Команды вызова call и возврата return
Аппаратный стек и локальные переменные

RTL: машинно-независимый Ассемблер
Каждый процессор имеет свои специфические команды, наборы регистров и режимы адресации, поэтому программу на Ассемблере невозможно перенести с одной аппаратной платформы на другую. Для того чтобы не зависеть от конкретного процессора, часто используют язык описания команд RTL, от англ. Register Transfer Language — язык перемещения регистров. Фактически RTL представляет собой Ассемблер, не зависящий от конкретного процессора.

RTL: машинно-независимый Ассемблер
RTL: машинно-независимый Ассемблер - 2
Примеры на RTL и Ассемблере Intel 80x86
Вычисление наибольшего общего делителя
Вычисление наибольшего общего делителя - 2
Суммирование массива
Суммирование массива - 2
Внешние устройства и аппаратные прерывания
Внешние устройства и аппаратные прерывания - 2
Виртуальная память и параллельные задачи

Основы языка Си
В настоящее время язык Си и объектно-ориентированные языки его группы (прежде всего C++, а также Java и C#) являются основными в практическом программировании. Достоинство языка Си - это, прежде всего, его простота и лаконичность. Язык Си легко учится. Главные понятия языка Си, такие, как статические и локальные переменные, массивы, указатели, функции и т.д., максимально приближены к архитектуре реальных компьютеров. Так, указатель - это просто адрес памяти, массив - непрерывная область памяти, локальные переменные - это переменные, расположенные в аппаратном стеке, статические - в статической памяти

Структура Си-программы
Структура Си-программы - 2
Функции
Программа "Hello, World!"
Типы переменных
Базовые типы
Целочисленные типы
Тип int
Тип char
Типы short и long

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

Фигурные скобки
Оператор if
Выбор из нескольких возможностей: if...else if...
Пример: решение квадратного уравнения
Пример: решение квадратного уравнения - 2
Пример: решение квадратного уравнения - 3
Цикл while
Пример: вычисление квадратного корня
Выход из цикла break, переход на конец цикла
Оператор перехода на метку goto

Представление матриц и многомерных массивов
Специального типа данных матрица или многомерный массив в Си нет, однако, можно использовать массив элементов типа массив. Например, переменная a представляет матрицу размера 3?3 с вещественными элементами: double a[3][3]; Элементы матрицы располагаются в памяти последовательно по строкам: сначала идут элементы строки с индексом 0, затем строки с индексом 1, в конце строки с индексом 2 (в программировании отсчет индексов всегда начинается с нуля, а не с единицы!).

Представление матриц и массивов
Представление матриц и массивов - 2
Пример: метод Гаусса
Пример: метод Гаусса - 2
Пример: метод Гаусса - 3
Пример: метод Гаусса - 4
Пример: метод Гаусса - 5
Работа с файлами
Открытие файла: функция fopen
Открытие файла: функция fopen - 2

Структуры данных
"Алгоритмы + структуры данных = программы". Это - название книги Никлауса Вирта, знаменитого швейцарского специалиста по программированию, автора языков Паскаль, Модула-2, Оберон. С именем Вирта связано развитие структурного подхода к программированию. Н.Вирт известен также как блестящий педагог и автор классических учебников.

Общее понятие структуры данных
Массив как базовая структура
Массив как базовая структура - 2
Реализация одних структур на базе других
Простейшие структуры данных. Стек. Очередь
Очередь
Очередь - 2
Реализация очереди на базе массива
Стек
Использование стека в программировании

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

Массовые операции
Список
Ссылочная реализация списка
Деревья и графы
Деревья и графы - 2
Множество
Множество - 2
Реализации множества - хеширование
Бинарный поиск
Бинарный поиск - 2

Параллельное программирование

Реализация языка логического программирования ПРОЛОГ на ВС SPMD-архитектуры Рассмотрим упрощенную задачу в виде ПРОЛОГ-программы, содержащую все характерные элементы решения задачи удовлетворения (сложной) цели на основе базы знаний.

Реализация языка логического программирования ПРОЛОГ на ВС SPMD-архитектуры
Производится фиксация варианта связывания переменных и унификация, при которой отбрасываются несовместимые варианты связывания, т.е. противоречащие фактам и правилам. Варианты связывания всех переменных, прошедшие все этапы унификации, являются решением.

ПРОЛОГ на ВС SPMD-архитектуры
ПРОЛОГ на ВС SPMD-архитектуры - 2
ПРОЛОГ на ВС SPMD-архитектуры - 3
ПРОЛОГ на ВС SPMD-архитектуры - 4
ПРОЛОГ на ВС SPMD-архитектуры - 5
Нахождение последнего элемента списка
Нахождение последнего элемента списка - 2
Нахождение последнего элемента списка - 3
Нахождение последнего элемента списка - 4
Нахождение последнего элемента списка - 5

Принцип работы БД с циркулирующей информацией
Желание уйти от рекомендаций общего характера приводит к рассмотрению классов задач или отдельных "представительных" задач и к демонстрации их возможностей параллельного решения по SPMD-технологии, привлекающей все большее внимание как разработчиков ВС, так и математиков-программистов. По этой технологии вычислительный процесс организуется так, что единственная программа одновременно запускается на всех исполнительных устройствах — на процессорах ВС, на ЭВМ вычислительного комплекса, на рабочих станциях (РС) ЛВС.

Работа БД с циркулирующей информацией
Работа БД с циркулирующей информацией - 2
Работа БД с циркулирующей информацией - 3
Работа БД с циркулирующей информацией - 4
Архитектуры ротационных БД
Архитектуры ротационных БД - 2
Эффективность и технические требования
Эффективность и технические требования - 2
Эффективность и технические требования - 3
Сетевые БД с циркулирующими запросами

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

Сложность алгоритма распараллеливания
Сложность алгоритма распараллеливания - 2
Сложность алгоритма распараллеливания - 3
Сложность алгоритма распараллеливания - 4
Анализ сетевых топологий и обоснование
Звездообразная сеть IBM Token Ring, ARCnet)
Кольцевая сеть FDDI, IBM Token Ring)
Шинная организация (Ethernet, ARCnet)
Управление обменом в сети типа "шина"
Управление обменом в сети типа "шина" - 2

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

Графический метод решения и его обобщение
Графический метод решения и его обобщение - 2
Графический метод решения и его обобщение - 3
Графический метод решения и его обобщение - 4
Общий алгоритм перебора
Общий алгоритм перебора - 2
Параллельная процедура прямого перебора
Сложность алгоритма прямого перебора
Пример
Пример - 2

Постановка задачи и планы решения
Пусть [15] в пунктах A1, A2, ... ,Am производят некоторый однородный продукт в объеме ai (i=1, 2, ... , m) единиц. В пунктах B1, B2, ... ,Bn этот продукт потребляется в объеме bj ( j=1, 2, ... , n) единиц. Из каждого пункта производства {Ai} возможна транспортировка в любой пункт потребления Bj. Транспортные издержки} по перевозке из пункта Aiв пункт Bjединицы продукции равны cij (i=1, ... , m; j=1, ... , n).

Параллельный алгоритм решения
Параллельный алгоритм решения - 2
Параллельный алгоритм решения - 3
Параллельный алгоритм решения - 4
Параллельный алгоритм решения - 5
Параллельный алгоритм решения - 6
Параллельный алгоритм решения - 7
Параллельный алгоритм решения - 8
Параллельный алгоритм решения - 9
О применении схемы Гаусса

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

Параллельное решение "плоской" задачи НП
Предпосылки метода
Принцип внешней точки
Принцип внешней точки - 2
Основные предположения
Основные предположения - 2
Применение косинуса как функции меры угла
Применение косинуса как функции меры угла - 2
Применение косинуса как функции меры угла - 3
Алгоритм. Пример

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

Граф-схемы параллельных алгоритмов
Граф-схемы параллельных алгоритмов - 2
Граф-схемы параллельных алгоритмов - 3
Граф-схемы параллельных алгоритмов - 4
Временные оценки на информационных графах
Временные оценки на информационных графах - 2
Временные оценки на информационных графах - 3
Временные оценки на информационных графах - 4
Временные оценки на информационных графах - 5
Временные оценки на информационных графах - 6

Общая схема параллельных вычислений при обслуживании потока заявок (в АСУ)
Каждая макроинструкция может заключать большой объем работ. Это — отдельные операторы, задачи (функциональные модули), задания, процессы и др. Макропрограмма либо содержит макроинструкции, которые соответствуют логическим операторам, влияющим на выбор ее ветви, либо имеет специальный блок управления. В результате выполнения этих операторов формируется (блок 2) поток макроинструкций (очередь), подлежащих выполнению процессорами.

Особенности параллельного процесса
Особенности параллельного процесса - 2
Особенности параллельного процесса - 3
Классификация
Централизованное диспетчирование
Децентрализованное диспетчирование
Децентрализованное диспетчирование - 2
Децентрализованное диспетчирование - 3
Комбинированное диспетчирование
Комбинированное диспетчирование - 2

Схема организации параллельного процесса
Объединим в законченную модель методы управления, диспетчирования, синхронизации работ и контроля состояния вычислительных средств при построении схемы АСУ коллективного пользования на основе многопроцессорной ВС, ВК или процессоров локальной сети, располагающих общей памятью или достаточно оперативным обменом.

Схема организации параллельного процесса
Схема организации параллельного процесса - 2
Схема организации параллельного процесса - 3
Диспетчирование

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

Диспетчер распределения работ в ВС
Диспетчер распределения работ в ВС - 2
Формальное описание алгоритма диспетчера
Формальное описание алгоритма диспетчера - 2
Формальное описание алгоритма диспетчера - 3
Инфо графы с векторными весами вершин
Диспетчер последовательного назначения
Диспетчер последовательного назначения - 2
Диспетчер последовательного назначения - 3
Диспетчер последовательного назначения - 4

Средства синхронизации параллельных процессов
Матрица следования. Является эффективным средством синхронизации при реализации первого способа распараллеливания. Допускает автоматическое составление в процессе диспетчирования, как рассмотрено ранее. Легко составляется пользователем, планирующим параллельный процесс. Для оптимального планирования требует временной оценки работ либо оценки их сравнительной трудоемкости.

Средства синхронизации процессов
Средства синхронизации процессов - 2
Средства синхронизации процессов - 3
Средства синхронизации процессов - 4
Средства синхронизации процессов - 5
Средства синхронизации процессов - 6
Средства синхронизации процессов - 7
Основные понятия

Оценка производительности ВС
Если несколько процессоров составляют ВС, то важной характеристикой ее эффективности эффективности (основные составляющие эффективности — производительность, надежность, стоимость) при специализированном использовании (например, в составе АСУ) является коэффициент загрузки процессоров kЗ. Для его определения находят коэффициенты загрузки процессоров

Оценка производительности ВС
Оценка производительности ВС - 2
Оценка производительности ВС - 3
Помехоустойчивые вычисления
Помехоустойчивые вычисления - 2
Помехоустойчивые вычисления - 3
Помехоустойчивые вычисления - 4
Особенности обеспечения надежности ВС
Особенности обеспечения надежности ВС - 2
Оценка надежностных характеристик ВС

Основные направления исследований в области Grid-технологий
Термин "Grid-вычисления" (Computing grid), где "grid" означает "решетка, сетка, сеть", по смыслу аналогичен выражению "единая энергосистема". Суть его заключается в стремлении объединить все компьютеры мира в единую систему — в виртуальный суперкомпьютер невиданной мощности, что позволит распределять и перераспределять ресурсы между пользователями в соответствии с их запросами. Именно так человечество пользуется электричеством единых энергетических сетей

Исследования в области Grid-технологий
Исследования в области Grid-технологий - 2
Исследования в области Grid-технологий - 3
Немного истории
Grid-технологии решения информационных задач
Grid-технологии решения вычислительных задач
Основы проектирования Grid-технологий
Основы проектирования Grid-технологий - 2
Основы проектирования Grid-технологий - 3
Основы проектирования Grid-технологий - 4


Справочник по кабельнопроводниковой продукции
Евтушенко Алексей - Беглец
Основы экологического права
Информатика для юристов и экономистов
Эл Шми - Пробуждение
Емец Дмитрий Александрович - Билет На Лысую Гору
Управление документацией и новые информационные технологии
Электрическое Оборудование промышленных предприятий и установок
Теория Электропривода
100 компонентов общего назначения библиотеки Delphi 5
Bluetooth технические требования практическая реализация приложения (Архипкин ВЯ)
Мир объектов Excel 2000
Emacs для начинающих
Cамоучитель по Java
Электронная почта краткое руководство пользователя
Энвил Кристофер - Эвристика
Microsoft Visual J++. Создание приложений и аплетов на языке Java
Многоцелевое расширение почты Интернет
Учебник по HTML
Система доменных имен