WWW.DISS.SELUK.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА
(Авторефераты, диссертации, методички, учебные программы, монографии)

 

Pages:     | 1 |   ...   | 7 | 8 || 10 |

«ИНФОРМАТИКА БАЗОВЫЙ КУРС 2-е издание Рекомендовано Министерством образования Российской Федерации в качестве учебного пособия для студентов высших технических учебных заведений 300.piter.com Издательская программа 300 ...»

-- [ Страница 9 ] --

8. Чтобы изменить вид автоматически построенного графика, дважды щелкните внутри него. Откроется диалоговое окно Formatting Currently Selected X-Y Plot (Форматирование графика в декартовых координатах). Первая запись в списке на вкладке Traces (Кривые) соответствует первой отображенной кривой. Для изменения записи используются поля под списком.\ Рис. 18.5. Задание способа отображения линий графика 9. Под столбцом Legend Label (Подпись) введите название графика.

10. В раскрывающемся списке под столбцом Symbol (Маркер) выберите способ обозначения для отдельных точек.

11. Под столбцом Туре (Вид линии) укажите, что необходимо пометить отдельные точки (points), а не провести непрерывную линию.

12. Выберите в списке вторую кривую и настройте ее отображение по своему вкусу.

13. Установите флажок Hide Arguments (Скрыть параметры), чтобы не отображать Глава 18. Средства автоматизации научно-исследовательских работ 14. Сбросьте флажок Hide Legend (Скрыть подписи), чтобы включить отображение под графиком заданных подписей кривых.

15. В поле Title (Заголовок) на вкладке Labels (Надписи) задайте название графика и включите режим его отображения: флажок Show Title (Показать заголовок).

16. Постройте график, на котором отображалась бы величина отклонения экспериментальных точек от линии приближения У'- (b0 + b^X). Отформатируйте его, используя те же средства, что и в предыдущем случае.

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

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

Дайте команду Format • Equation (Формат • Выражение), в раскрывающемся списке Style Name (Имя стиля) выберите пункт Variables (Переменные) и щелкните на кнопке Modify (Изменить). Для задания шрифта используйте поле со списком Шрифт.

Упражнение 18.7. Построение трехмерных графиков Задача. Изобразить на графике приблизительную форму электронных облаков в атомах.

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

• число / определяет тип орбитали (значения 0-3 соответствуют s-, p-, d- и /орбиталям);

• число т определяет магнитный момент электрона и может изменяться в диапазоне от -/ до /.

При т=0 форма электронного облака определяется на основе многочленов Лежандра первого рода:

2>(х) = —:— • —- (х2-1), где / — степень многочлена.

В этом случае ДФ) - \ Параметрическое задание соответствующей поверхности имеет следующий вид:

Углы 0, ф изменяются в диапазоне от 0 до 2л.

1. Запустите программу Mathcad.

2. Определите переменную /, которая укажет тип орбитали.

3. Построение поверхности будем производить по точкам. Задайте два диапазона, которые будут определять изменение параметров 9, ф, задающих поверхность.

Практическое занятие Рис. 18.6. График экспериментальных точек и аппроксимирующей прямой Удобно определить границы диапазона в целых числах (через точку с запятой, на экране изображаются две точки), а затем произвести перемасштабирование на отрезок [0; 2я].

4. Определите двумерные матрицы, определяющие значения координат х, у и z в зависимости от значения параметров. Используйте названия переменных Х0, Ю и 20.

5. Дайте команду Insert • Graph • Surface Plot (Вставка • График • Поверхность) или воспользуйтесь кнопкой Surface Plot (Поверхность) на панели инструментов Graph (График).

534 Глава 18. Средства автоматизации научно-исследовательских работ. 6. В появившейся области графика вместо заполнителя укажите имена отображаемых матриц через запятую, заключив все их в скобки: (XO.YO.ZO).

7. Чтобы изменить формат построенного графика, дважды щелкните на его области. Откроется диалоговое окно 3-D Plot Format (Форматтрехмерного графика).

8. На вкладке General (Общие) установите флажок Equal Scales (Равный масштаб), чтобы обеспечить одинаковый масштаб по осям координат.

9. На вкладке Appearance (Оформление) установите переключатель Fill Surface (Заливка поверхности), чтобы обеспечить заливку построенной поверхности.

10. На вкладке Lighting (Подсветка) включите режим освещения поверхности. Установите флажок Enable Lighting (Включить подсветку), отключите все источники света, кроме первого.

11. На панели Light Location (Размещение источника) задайте координаты источника света. Используйте кнопку Применить, чтобы сразу видеть последствия сделанных настроек. По окончании настройки закройте диалоговое окно щелчком на кнопке ОК.

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

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

Щ Мы научились строить трехмерные графики с изображением объемных поверхностей, заданных параметрически. Это фактически означает умение изображать любые фигуры, которые могут потребоваться в ходе практической Упражнение 18.8. Решение дифференциальных уравнений Задача. Найти функцию у{х), удовлетворяющую дифференциальному уравнению —— + у-х- cosx и имеюdx щую значение 0 при х - 0.



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

1. Запустите программу Mathcad.

Практическое занятие 2. Задайте начальное значение функции как элемент вектора у, размерность которого соответствует числу решаемых уравнений (в данном случае единице): yQ := 0.

3. Создайте функцию Т(х, у), которая вычисляет значение производной при заданных значениях независимой переменной и неизвестной функции:

4. Определите начальное (точка 0) и конечное значение отрезка интегрирования.

5. Укажите число шагов интегрирования.

6. Вычислите численное решение уравнения при помощи функции rkfixed.

Z:=rkfixed(y,a,b,K,T) Результат вычислений — матрица Z с двумя столбцами, первый из которых содержит значения независимой переменной, а второй — соответствующие значения функции.

7. Постройте график полученного решения.

8. Определите аналитическое решение данного уравнения при тех же начальных 9. Нанесите аналитическую кривую на тот же график и сравните поведение численного и точного решения.

Рис. 18.8. Графики численного и точного решения дифференциального уравнения 536 Глава 18. Средства автоматизации научно-исследовательских работ 10. Измените число шагов, на которые делится отрезок интегрирования, и исследуйте, как изменяется результат расчета при уменьшении и увеличении этого параметра.

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

Размещение собственных материалов в Интернете включает два этапа: подготовку материалов и их публикацию. Подготовка материалов состоит в создании документов, имеющих формат, принятый в Интернете, то есть Wefe-страниц, написанных на языке HTML. Публикация материалов, то есть открытие к ним доступа, осуществляется после решения организационных вопросов, связанных с получением дискового пространства на Wi?6-cepBepe для их размещения.

19.1. Создание Web-документов Автономные We^-документы используют язык HTML (HyperText Markup Language — язык разметки гипертекста). Гипертекст, то есть расширенный текст, включает дополнительные элементы: иллюстрации, ссылки, вставные объекты. Подразметкой понимается использование специальных кодов, легко отделяемых от смыслового содержания документа и используемых для реализации гипертекста. Применение этих кодов подчиняется строгим правилам, определяемым спецификацией языка HTML.

Особенность описания документа средствами языка HTML связана с принципиальной невозможностью достижения абсолютной точности воспроизведения исходного документа. Предполагается, что документ будет широко доступен в Интернете, и поэтому неизвестно, как будет организовано его воспроизведение. Документ может быть представлен на графическом экране, выведен в чисто текстовом виде или просто «прочитан» программой синтеза речи. Разметка HTML во всех этих случаях должна быть принята во внимание. Поэтому язык HTML предназначен не для форматирования документа, а для его функциональной разметки. Например, документы обычно начинаются с заголовков. Свойство части документа «быть заголовком» — это не особенность форматирования документа, а характеристика его содержания.

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

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

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

На этот текст воздействуют два тега Эффект применения тега может видоизменяться путем добавления атрибутов.

В парных тегах атрибуты добавляются только к открывающему тегу. Атрибуты представляют собой дополнительные ключевые слова, отделяемые от ключевого слова, определяющего тег, и от других атрибутов пробелами и размещаемые до завершающего тег символа «>». Способ применения некоторых атрибутов требует указания значения атрибута. Значение атрибута отделяется от ключевого слова атрибута символом «=» (знак равенства) и заключается в кавычки.

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

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

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

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

изменения, отображаемые на экране, вносятся в документ автоматически. Такой принцип соответствия экранного изображения реальному получил название WYSIWYG (от английского What You See Is What You Get — Что видите, то и получаете).

В качестве редактора WYSIWYG для языка HTML можно использовать текстовый процессор Word или входящую в состав пакета Microsoft Office программу FrontPage.

Существуют и другие программы того же самого назначения.

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

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

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

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

Основное содержание размещается в теле документа, которое ограничивается парным тегом. Строго говоря, положение структурных тегов в документе нетрудно определить, даже если они опущены. Поэтому стандарт языка HTML требует только наличия тега (и, соответственно, ). Тем не менее, при создании документа HTML опускать структурные теги не рекомендуется.

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

Заголовок документа Текст документа Элементы HTML Для парных тегов область влияния определяется частью документа между открывающим и закрывающим тегом. Такую часть документа рассматривают как элемент языка HTML. Так, можно говорить об «элементе BODY», включающем тег, основное содержание документа и закрывающий тег. Весь документ HTML можно рассматривать как «элемент HTML». Для непарных тегов элемент совпадает с тегом, который его определяет.

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

Теперь можно сформулировать правила вложения элементов.

• Элементы не должны пересекаться. Другими словами, если открывающий тег располагается внутри элемента, то и соответствующий закрывающий тег должен располагаться внутри этого же элемента.

• Блочные элементы могут содержать вложенные блочные и текстовые элементы.

• Текстовые элементы могут содержать вложенные текстовые элементы.

• Текстовые элементы не могут содержать вложенные блочные элементы.

Строго говоря, все правила языка HTML можно рассматривать исключительно как «пожелания». Средство, используемое для отображения Web-документа, сделает все возможное, чтобы истолковать разметку наиболее разумным образом. Тем не менее, гарантию правильного воспроизведения документа дает только неукоснительное следование требованиям спецификации языка.

Функциональные блочные элементы В большинстве документов основными функциональными элементами являются заголовки и абзацы (рис. 19.1). Язык HTML поддерживает шесть уровней заголовков. Они задаются при помощи парных тегов от до. При отображении Web-документа на экране компьютера эти элементы показываются при помощи шрифтов разного размера.

Обычные абзацы задаются с помощью парного тега. Язык HTML не содержит средств для создания абзацного отступа («красной строки»), поэтому при отображении на экране компьютера абзацы разделяются пустой строкой. Закрывающий тег рассматривается как необязательный. Подразумевается, что он стоит перед тегом, который задает начало очередного абзаца документа. Например:

Первый абзацВторой абзац Заголовок второго уровня Следствием наличия специального тега, определяющего абзац, является тот факт, что обычного символа конца строки, вводимого по нажатию клавиши ENTER, для 19.2. Применение языка HTML Рис. 19.1. Форматирование заголовков и абзацев при отображении Web-страницы создания абзацного отступа недостаточно. Язык HTML рассматривает символы конца строки и пробелы особым образом. Любая последовательность, состоящая только из пробелов и символов конца строки, при отображении документа рассматривается как одиночный пробел. Это, в частности, означает, что символ конца строки даже не осуществляет перехода на новую строку (для этой цели используется текстовый элемент, задаваемый непарным тегом ).

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

Этот тег создает горизонтальную линейку шириной в 10 пикселов, занимающую половину ширины окна и расположенную справа.

Гипертекстовые ссылки Гипертекстовая ссылка (рис. 19.2) является фрагментом текста документа и потому задается текстовым элементом, определяемым при помощи парного тега. Этот элемент содержит обязательный атрибут, который не может быть опущен. В данном случае обязательным является атрибут HREF= (знак равенства показывает, что необходимо задать значение этого атрибута).

Гипертекстовые ссылки Рис. 19.2. На Web-странице гипертекстовые ссылки выделяются В качестве значения атрибута используется адрес URL документа, на который указывает ссылка. Она может указывать на произвольный документ, располагающийся на любом общедоступном узле сети (Weu-узел, архив FTP и прочие). Например, открывающий тег ссылки может иметь вид.

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

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

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

Полный формат гиперссылки включает возможность ссылки на определенное место внутри страницы. Но это можно сделать для страниц собственной разработки, пометив соответствующее место при помощи якоря. Якорь задается также при помощи парного тега, но в роли обязательного выступает атрибут NAME=. Значение этого атрибута — произвольная последовательность латинских букв и цифр (пробелы недопустимы), рассматриваемая как имя якоря. Для ссылки на якорь его имя указывается в конце адреса URL после символа «#».

Web-графика Графические иллюстрации в большинстве случаев являются неотъемлемой частью Web-документов. Сегодня графические элементы Wei-страниц используют два основных формата — GIF и JPEG (допустим также формат PNG, который, однако, так и не получил широкого распространения). Все графические браузеры, предназначенные для отображения №е6-страниц на экране компьютера, способны распознавать и отображать файлы этих форматов.

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

Файлы формата GIF (Graphic Interchange Format) имеют расширение.GIF. Изображения в этом формате содержат 256 цветов, заданных индексной палитрой. Файл упакован и может занимать значительно меньше места, чем неупакованный растровый рисунок (например, в формате.BMP).

Спецификация формата GIF89a позволяет создавать файлы.GIF, обладающие специальными возможностями.

• Один из цветов изображения может быть объявлен прозрачным. Это означает, что в соответствующих местах сквозь него будет проглядывать фон Web-страницы, что позволяет задать не только прямоугольную форму рисунка и делает его более естественным.

• Чересстрочные изображения при их приеме из Интернета прорисовываются постепенно, вначале грубо, а затем все более и более четко. Это «скрадывает»

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

• GIF-анимация превращает обычный рисунок в небольшой видеоролик. В стандартном файле с расширением.GIF хранится набор кадров, а также сценарий их отображения.

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

Файлы формата/Р.Е(7 (Joint Photographic Expert Group — по названию группы исследователей, предложившей этот формат, читается «джей-пег») могут иметь расширение JPEG или. JPG. Формат предназначен для хранения фотографических изображений, использующих 24-разрядный цвет. При конвертировании в формат/РЕС происходит потеря части информации, приводящая к некоторому ухудшению качества изображения, обычно незаметному на глаз.

При выборе формата изображения в первую очередь принимают во внимание объем получающегося файла и во вторую — качество изображения. При загрузке Webдокумента львиную долю времени занимает именно загрузка иллюстраций, так что любая экономия приветствуется. При выборе формата рекомендуется создать два файла: в формате GIF м в формате JPEG с минимально приемлемым качеством, после чего выбрать вариант, имеющий меньший объем.

Рисунки хранятся на Web-узлах в отдельных файлах, но отображаются как элементы Web-страниц. Для вставки рисунка используется текстовый элемент, задаваемый непарным тегом. Тег должен содержать обязательный атрибут SRC=, задающий адрес URL файла с изображением в относительной или абсолютной форме.

При отображении рисунка браузер по умолчанию использует его реальные размеры.

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

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

Для изображения, которое действительно включено в строку, можно задать режим взаимодействия с текстом с помощью атрибута ALIGN=.

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

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

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

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

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

или для удобства обозначать их идентификаторами. Например, число п, равное 3,1416, можно обозначить как pi и везде вместо числа применять идентификатор.

Только изменять значение pi нельзя, так как это не переменная, а константа.

Числовые данные Числа обычно бывают двух видов: целые и дробные. Если число отрицательное, перед ним ставится знак «-»; если положительное, то знак «+» можно ставить, а можно и опускать. Вычисления над целыми числами выполняются точно, вычисления над дробными числами — приближенно. При записи дробных чисел в качестве десятичного разделителя используется точка:

Очень большие или очень маленькие числа записываются специальным образом.

Для них дополнительно указывается мантисса — число со знаком, являющееся степенью числа 10. Мантисса записывается справа от числа через букву е (или Е).

Пробелы в такой записи не допускаются.

Например, число 100 (единица, умноженная на 10 во второй степени) запишется так:

число 0,003 (тройка, умноженная на 10 в минус третьей степени) так:

число со 120 нулями — так:

Допускается дробная запись числа с мантиссой:

Тип числа Бейсик дробное Арифметические операции Для записи арифметических действий используются арифметические операторы.

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

К основным арифметическим операциям относятся:

Такая форма записи отвечает общепринятым соглашениям и принята в большинстве языков программирования.

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

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

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

Выражение состоит из одной операции «+» и двух операндов — переменной И и числовой константы 2.

Каждое выражение имеет значение, которое определяется в момент выполнения оператора, содержащего это выражение. Если на момент вычисления выражения И +2 в переменной И хранится число 3, то значение этого выражения будет равно (3+2).

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

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

Результатом сравнения является true, если оно удачно, и false в противном случае.

В таблице даны примеры записи операций сравнения для разных языков.

Операция Не равно Меньше Больше Больше или равно В одном выражении может потребоваться проверка нескольких подобных условий.

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

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

В следующей таблице приведен синтаксис записи логических операций.

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

Примеры логических выражений:

(Value < Oldvalue) OR (Value 0) Логический тип Базового типа нет.

Используется числовой тип INTEGER Строчные выражения Строки в языках программирования всегда заключаются в кавычки. В Си++ и Бейсике для этого используются двойные кавычки, в Паскале — одинарные.

"это строка Бейсика или Си++" 'это строка Паскаля' Строка может быть пустой — не содержать ни одного символа.

Например:

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

Кроме того, часто допускается также операция сцепления строк, записываемая с помощью символа «+». Например:

"123" + "4567" - получится "1234567" Тип «строка»

STRING

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

Сложные данные Структуры. До сих пор рассматривались базовые типы данных: числа, строки, логические величины — и операции над базовыми данными. Однако для повышения производительности труда программистов и повышения качества их работы необходимо, чтобы язык программирования имел средства, позволяющие описывать данные в виде, максимально приближенном к их реальным аналогам. Например, чтобы организовать обработку данных по студентам, в программе удобно не просто описать десяток различных переменных, а объединить их в структуру (или запись) «студент», состоящую из полей разного типа «имя», «пол», «год рождения», «группа» и т. д.

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

списки, деревья и т. п. При этом структура объединяет группу разных данных под одним названием.

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

Синтаксис описания структуры Доступ к содержимому структуры:

Student.BirthYear = 1980;

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

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

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

Синтаксис описания массива В Бейсике нижней границей считается 1, в Си++ — 0, в Паскале она указывается явно.

Вот примеры описания массивов.

Бейсик:

DIM IntArray(1000) AS INTEGER Паскаль:

Си++:

Доступ к элементу массива осуществляется по его номеру. Этот номер указывается в круглых (Бейсик) или квадратных (Паскаль, Си++) скобках сразу за именем массива (такое действие называется индексированием):

Массивы, границы которых явно заданы в команде описания, называются статическими. Их размер известен заранее и не меняется на всем протяжении работы программы.

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

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

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

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

а[0].Items.Strings[4].value Массив а состоит из структур, в описании которых есть поле Items, являющееся тоже структурой, имеющей поле Strings, которое, в свою очередь, представляет собой массив структур, имеющих поле value.

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

Синтаксис команд описания данных Бейсик Вот примеры описания переменных.

Бейсик:

DIM X AS DOUBLE

Паскаль:

20.3. Алгоритмическое (модульное) программирование Си++:

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

Паскаль:

Си++:

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

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

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

Синтаксис описания нового типа Аналогичен type имя = описание; typedef struct имя-структуры является Название нового типа можно использовать во всех последующих командах описания переменных.

Паскаль:

type TMyArray = array[0..99] of integer;

type TMyRecord = record var MyArray: TMyArray;

var R: TMyRecord;

Си++:

typedef struct name } TNewStruct;

TNewStruct NewStruct;

Разделение операторов Если записать подряд несколько операторов и не указать, где кончается один и начинается другой, то в процессе компиляции возникнет множество проблем с выделением отдельных операторов. Поэтому операторы в Паскале и Си++ отделяются друг от друга точкой с запятой «;» (каждый оператор в этих языках должен заканчиваться таким символом), а в Бейсике — двоеточием «:» или переходом на новую строку.

Блок операторов Часто в программе возникает необходимость выполнить группу операторов (например, в зависимости от какого-либо условия). Такая группа объединяется в блок с помощью специальных скобок начала и конца блока, называемых логическими скобками.

В Бейсике явного понятия «блок операторов» нет, в Паскале для этого используются ключевые слова begin и end, а в Си++ — фигурные скобки «{» и «}».

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

При этом считается, что объявленные в них переменные являются локальными и их область действия — текущий блок, в котором они описаны. Как только встречается логическая скобка, закрывающая блок (например,«}»), соответствующая переменная перестает существовать, а выделенная для нее память освобождается.

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

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

Сам оператор присваивания записывается знаком «=» в Бейсике и Си++ и комбинацией двух знаков «:=» в Паскале (пробел между ними не допускается).

Например:

В переменную Result запишется число 5. Знак «=» означает именно присваивание, а не сравнение, которое может использоваться только в логических выражениях.

Другой пример:

Сначала вычисляется значение выражения Х+1, и затем оно заносится в переменную X, Допустима и такая запись:

Прежде всего выполняется сравнение в правой части (X = X), его значение всегда будет true, и значением переменной X, соответственно, тоже станет true. Для повышения наглядности оператора присваивания в Паскале принята специальная форма его записи:

Примеры.

Бейсик:

Паскаль:

Си++:

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

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

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

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

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

Синтаксис комментария это комментарий языка Паскаль (* а это вложенный комментарий *) Условный оператор (условные вычисления) С помощью одного оператора присваивания можно создавать достаточно сложные расчетные программы, однако реализовать абсолютное большинство алгоритмов, просто последовательно выполняя операторы присваивания, невозможно. Постоянно приходится изменять порядок выполнения последовательности вычислений в зависимости от определенных условий. Эти условия записываются в виде логических выражений и всегда принимают одно из двух значений — true или false (истинно или ложно). При этом происходит разветвление программы — выполнение в дальнейшем может продолжиться с разных операторов.

Синтаксис условного оператора примерно одинаков во всех языках программирования — он представляет собой конструкцию:

если условие истинно то выполнить оператор- иначе выполнить оператор- После ключевого слова IF (если) следует условие, и если оно истинно, то выполняется оператор или блок операторов, следующих за ключевым словом THEN (то);

если же оно ложно, то выполняется оператор или блок операторов, следующих за Синтаксис условного оператора IF условие THEN if условие then оператор- 20.3. Алгоритмическое (модульное) программирование Примеры.

Бейсик:

Паскаль:

Си++:

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

Бейсик:

Паскаль:

Си++:

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

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

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

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

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

Синтаксис оператора цикла FOR счетчик = началы-юе_значение ТО конечное_значение STEP приращение Бейсик тело_цикла группа_операторов Если приращение не указывать, то считается, что оно равно for счетчик := начальное_значение to конечное_значение do Паскаль оператор или блок операторов;

Си++ for( счетчик = начальное_значение; условие_завершения; счетчик = счетчик + оператор или блок операторов;

В последнем примере счетчик будет принимать значения от 0 до 999, потому что нумерация элементов массива в Си++ начинается с нуля.

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

Синтаксис оператора цикла Бейсик DO WHILE условие группа операторов Бейсик:

Паскаль:

Си++:

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

Например:

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

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

Контроль над выходом из цикла при наступлении определенного события при этом полностью возлагается на программиста.

В Бейсике есть специальная форма оператора цикла, позволяющая явно описывать такие бесконечные циклы:

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

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

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

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

В Паскале и Бейсике есть операторы для такой работы, в Си++ они выделены в специальные библиотеки. Введен также специальный тип данных «файл» (FILE).

Работа с файлами всегда происходит в три этапа.

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

Каждый такой блок называется записью.

2. Выполняется считывание, обновление или удаление записей в файле.

3. Файл закрывается. Если этого не сделать, то он останется открытым и в дальнейшем к нему нельзя будет обратиться из других программ.

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

Вопросы для самоконтроля 1. Какие типы данных считаются базовыми?

2. Приведите примеры арифметических и логических выражений.

3. Напишите формулу для вычисления среднего арифметического и среднего геометрического значений двух переменных.

4. В чем различие структуры и массива?

5. Зачем нужны комментарии?

6. С помощью условных операторов выполните проверку неравенства х < у < z.

7. Из каких частей состоит оператор цикла?

8. Назовите достоинства и недостатки параллельных вычислений.

9. Как организуется работа с файлами?

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

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

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

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

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

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

Когда все приложение будет написано и отлажено, тогда можно приступить к реализации этой функции.

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

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

Рассмотрим пример, демонстрирующий методику нисходящего проектирования.

Имеется массив Ocenki, состоящий из N (N> 2) судейских оценок (каждая оценка положительна). В некоторых видах спорта принято отбрасывать самую большую и самую маленькую оценки, чтобы избежать влияния необъективного судейства, а в зачет спортсмену идет среднее арифметическое из оставшихся оценок. Решим эту задачу, постепенно детализируя алгоритм (без привязки к конкретному языку программирования).

1. Процесс решения наиболее просто описывается подпрограммами:

Ввести_оценки_в_массив;

Удалить_самую_большую_оценку;

Удалить_самую_маленьк?уюоценку;

Рассчитать_среднее_арифметическое_оставшихся_оценок;

Вывести_результаты;

Теперь можно приступить к детализации каждой их этих подпрограмм.

2. Удалить_самую_большую_оценку;

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

I = Номер_самого_большого_элемента_в_массиве;

3. Удалить_самую_маленькую_оценку;

I = Номер_самого_маленького_элемента_в_массиве;

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

4. Рассчитать_среднее_арифметическое_оставшихся_оценок;

Здесь потребуется оператор цикла, вычисляющий сумму всех элементов массива Ocenki.

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

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

Реализацию подпрограмм Номер_самого_большого_элемента_в_массивеи Номер_ самого_маленького_элемента_в_массиве выполните самостоятельно.

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

В Си++ понятия «процедура» нет — там имеются только функции, а если никакого значения функция не вычисляет, то считается, что она возвращает значение типа «никакое» (void).

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

Управление последовательностью вызова подпрограмм Подпрограммы вызываются, как правило, путем простой записи их названия с нужными параметрами. В Бейсике есть оператор CALL для явного указания того, что происходит вызов подпрограммы.

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

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

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

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

Локальные переменные, объявленные внутри подпрограммы, имеют областью действия только ее тело.

Функции функции (список_параметров) (список_параметров): имя(список_параметров) Как функция возвращает значение После того как функция рассчитала нужное значение, ей требуется явно вернуть его в вызывающую программу. Для этого может использоваться специальный оператор (return в Си++) или особая форма оператора присваивания, когда в левой части указывается имя функции, а справа — возвращаемое значение.

Далее приведены примеры функции, вычисляющей значение квадрата аргумента.

Бейсик:

FUNCTION SQR% (X AS INTEGER)

END FUNCTION

Паскаль:

function SQR(X: integer): integer;

Си++:

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

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

Пример.

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

Событийно-ориентированное программирование С активным распространением системы Windows и появлением визуальных RADсред широкую популярность приобрел событийный подход к созданию программ — событийно-ориентированное программирование.

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

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

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

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

Вопросы для самоконтроля 1. С какой целью применяют подпрограммы?

2. Чем характеризуются процедурные языки программирования?

3. В чем состоит идея нисходящего проектирования?

4. Что общего и в чем отличия процедуры и функции?

5. Определите значение выражения F(1,2) + F( 10,0.1), если функция F(a,b) рассчитывается как а*а + b*b.

6. В чем различие между событийным и структурным программированием?

7. Как организуется обработка программных событий?

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

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

Реальные объекты окружающего мира обладают тремя базовыми характеристиками:

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

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

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

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

В Си++ и Паскале для описания класса используется ключевое слово class.

Паскаль:

function GetSum(n: integer): integer;

procedure Initialize;

void Initialize ();

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

Паскаль:

procedure TMyClass.Initialize;

Си++:

Класс — это тип данных, такой же, как любой другой базовый или сложный тип.

На его основе можно описывать конкретные объекты (экземпляры классов).

Паскаль:

var Cl, C2: TMyClass;

Си++:

TMyClass Cl, С2;

Доступ к свойствам объектов и к их методам осуществляется так же, как к полям записей, через точку:

С2.Initialize;

х := Cl.GetSum(21);

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

Наследование Важнейшая характеристика класса — возможность создания на его основе новых классов с наследованием всех его свойств и методов и добавлением собственных.

Класс, не имеющий предшественника, называется базовым.

Например, класс «животное» имеет свойства «название», «размер», методы «идти»

и «размножаться». Созданный на его основе класс «кошка» наследует все эти свойства и методы, к которым дополнительно добавляется свойство «окраска» и метод «пить».

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

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

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

Вопросы для самоконтроля 1. Для чего в языки программирования было введено понятие класса?

2. В чем различие между классом и объектом?

3. Поясните понятие инкапсуляции на бытовых примерах.

4. Для чего применяется механизм наследования?

5. Как полиморфизм модифицирует принцип наследования?

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

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

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

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

Период разработки ПО Рассмотрим классический период разработки ПО.

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

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

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

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

ность и не готов платить достаточно большие суммы. Примерный объем работ на этом этапе — 5% от объема всего проекта.

2. Начинается предпроектное обследование объекта автоматизации. С помощью CASE-средств составляется формальная модель его работы, модель базы данных, объектов и потоков информации. На этом этапе привлекаются специалисты заказчика и эксперты, хорошо знакомые с предметной областью, для которой составляется задача.

Примерный объем работ второго этапа — 10% от общего.

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

Примерный объем работ третьего этапа — 10% от общего.

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

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

Достаточно популярна методология итерационного проектирования, ориентированная на использование 7?/Ш-средств и систем автоматической генерации исходных текстов на основе созданной формальной модели. Такой подход хорош тем, что позволяет быстро создать первый работающий прототип программы, когда еще требования к ней окончательно не определены, а в дальнейшем, на следующих итерациях (их обычно требуется от двух до пяти), постепенно детализировать и реализовывать конкретные возможности, пропущенные по каким-то причинам на предыдущей итерации. Эта методология немного отличается от нисходящего проектирования тем, что применяется, когда окончательные требования неизвестны и могут меняться, а основные работающие функции нужны заказчику как можно быстрее (заказчик чаще хочет получить приложение, законченное на 80%, сегодня, чем законченное на 100% завтра). При нисходящем проектировании основная структура задачи должна быть определена заранее.

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

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

В процессе разработки необходимо:

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

• непрерывно контролировать ход работ в соответствии с планом и при отклонениях от него принимать экстренные меры.

Примерный объем этих работ — 10% от общего объема проекта.

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

Примерный объем этих работ — 10% от общего объема проекта.

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

Необходимо выверить, ввести или перенести множество жизненно важной информации: всю бухгалтерскую и финансовую отчетность, данные о хранимом оборудовании и множество других сведений. Этот этап самый трудоемкий и «нудный» и занимает порой до 90% времени всего проекта. Для систем автоматизации больших предприятий он растягивается на годы.

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

Примерный объем трудозатрат на обучение — 5% от общего объема проекта.

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

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

Реально объем непосредственного программирования и отладки (тестирования) в цикле разработки невелик. Он составляет 10-20% от общего объема работ.

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

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

Системы не очень сложного конфигурационного управления, охватывающие контроль версий исходных текстов и ряд других аспектов работы группы программистов, встроены, в частности, в такие системы, как Delphi 7 и Visual Studio NET.

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

В университете Карнеги-Меллона в США несколько лет назад была разработана специальная методология СММ (Capability Maturity Model for Software), позволяГлава 20. Основы программирования ющая сертифицировать компании по одному из 5 уровней «зрелости» процесса разработки ПО. Согласно результатам 20-летних исследований Министерства обороны США оказалось, что главная причина слишком частых неудач при разработке крупных информационных проектов заключается прежде всего в неумении менеджеров управлять процессом создания качественного ПО.

В отличие от стандарта ISO 9000, который просто подтверждает качественную работу компании на основании достаточно общих критериев, методология СММ ориентирована именно на качество управления процессом разработки и имеет множество конкретных рекомендаций и указаний по способам организации всех этапов создания ПО. Сегодня в США невозможно получить крупный государственный или военный заказ на создание программного продукта стоимостью более 2 млн.

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

Повышение индивидуального мастерства На основе методологии СММ была создана методология PSP (Personal Software Process), ориентированная на индивидуальных разработчиков. Она позволяет в несколько раз повысить качество создания программ, значительно поднять собственную производительность и научиться предсказывать сроки выполнения работ.

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

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

Гибкие методики В последние годы наряду с ростом интереса к «тяжелым» сертификационным методологиям значительно увеличилась роль и популярность так называемых гибких, проворных (agile) методик. Они не требуют значительных усилий по реорганизации компании-разработчика и могут быть внедрены не за годы, а за недели. Наиболее известные среди них — экстремальное программирование, MDA (архитектура системы, управляемая моделью), Scrum и другие.

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

Методы маркетинга программного обеспечения Коммерческое ПО. При создании программного продукта издатель, выполнив анализ рынка, заказывает у исполнителя разработку такого ПО, которое должно пользоваться на рынке спросом, и выделяет на его создание деньги. По окончании работ издатель получает все имущественные права на созданный продукт (право на тиражирование, продажу под собственной торговой маркой, право на получение дохода от программы любым способом). При этом может быть оговорено получение исполнителем некоторого процента (роялти) с каждой проданной копии (как правило, для программ, издающихся сотнями тысяч или миллионами копий, роялти составляет 1-3%) — тогда он получает меньшую сумму на разработку или вообще создает программу за свой счет. Если же отчисления не предусмотрены, то все расходы по подготовке программы издатель берет на себя. Он также вкладывает средства в упаковку, рекламную кампанию, организацию сетей сбыта и т. д. Издатель обеспечивает расходы, связанные с сопровождением продукта и технической поддержкой пользователей.

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

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

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

Если человеку эта программа нравится, он оплачивает небольшую сумму и получает полную работоспособную версию.

В Интернете есть немало узлов, которые предлагают бесплатные услуги по размещению таких программ. Отечественным shareware-разработчикам можно порекомендовать сайт www.swrus.com, на котором можно найти множество материалов и форумов по всем вопросам организации shareware. * Бесплатное ПО (freeware, public domain). Такие программы не имеют никаких ограничений, однако автор может попросить заплатить ему некоторую сумму, не настаивая, впрочем, на этом (это метод freeware). Некоторые программы авторы называют «общественным достоянием» (public domain), ничего взамен не требуют и нередко распространяют такое ПО в исходных текстах.

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

Вопросы для самоконтроля 1. В чем трудности разработки крупных программных проектов?

2. Опишите организацию работы над сложной программной системой.

3. Какой этап разработки проекта является наиболее ответственным?

4. Какова роль собственно программирования в ходе работы над проектом?

5. Опишите известные вам методы контроля качества программного обеспечения.

6. Каковы основные методы распространения программного обеспечения?

20.7. Пример на Бейсике. Разведение кроликов В данном и последующих разделах рассматриваются три примера, реализованные с помощью разных систем программирования: QBasic корпорации Microsoft (интерпретирующая версия Бейсика для операционной системы MS-DOS), Borland Delphi (система визуального программирования на Паскале) и Microsoft Visual Studio.NET (система программирования на Си++). Эти примеры включают в себя описание основных приемов работы с данными системами.

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

1,1,2,3,5,8,13,21,...

Надо определить, через сколько лет будет достигнута популяция в N особей.

Запуск QBasic Интерпретатор QBasic входит в стандартную поставку MS-DOS и расположен обычно в каталоге \DOS. Программа-интерпретатор называется qbasic.exe. После ее запуска на экране появится приветствие, которое пропускается нажатием на клавишу ENTER, после чего QBasic вызывает встроенную справочную систему на английском языке. Она закрывается нажатием клавиши ESC.

Рабочая область экрана (рис. 20.1) поделена на две части. В нижней части, в окне Immediate (Немедленное выполнение) можно вводить операторы Бейсика и тут же их выполнять.

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

Для перехода в окно Immediate (Немедленное выполнение) надо нажать клавишу F6. Чтобы сразу получить ответную реакцию от QBasic, достаточно набрать оператор и нажать клавишу ENTER, чтобы этот оператор выполнился.

На экране вывода появится число 4 (результат вычисления выражения 2+2), а в нижней строке — сообщение Press any key to continue (Нажмите любую клавишу для продолжения). Чтобы вернуться в QBasic, надо это сделать.

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

PRINT "Сумма = "; 2+ Если теперь нажать клавишу ENTER, то на экране вывода в новой строке (под ранее напечатанной четверкой) появится фраза Редактор программы Таким образом можно познакомиться с работой разных операторов Бейсика, однако выполнять их удастся только поодиночке. Чтобы выполнить группу операторов, их надо объединить в программу.

Набор и редактирование исходного текста программы осуществляется в верхнем окне интерпретатора. Для перехода в него используется клавиша F6.

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

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

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

Главная часть программы набирается в этом редакторе и должна выглядеть так (комментарии вводить не обязательно):

' описание переменной N — числа, особей Главная часть программы набирается в этом редакторе и должна выглядеть так (комментарии вводить не обязательно):

' описание переменной N — числа особей

DIM N AS INTEGER



Pages:     | 1 |   ...   | 7 | 8 || 10 |


Похожие работы:

«1 УТВЕРЖДАЮ Принят педагогическим советом Директор (подпись) _ _20 г. А.Н.ИПАТОВ 20_г. Протокол №_ М. П. Отчет о результатах самообследования Областного государственного бюджетного профессионального образовательного учреждения Костромской машиностроительный техникум (полное наименование учреждения профессионального образования в соответствии с Уставом) Кострома, 2014 2 Содержание: I.Аналитическая часть 1 Общие сведения об образовательном учреждении; 2 Регламентация и организация деятельности...»

«УТВЕРЖДАЮ: Ректор БФУ им. И. Канта _ А.П. Клемешев _ _ 20г. МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ БАЛТИЙСКИЙ ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ ИМЕНИ ИММАНУИЛА КАНТА (ФГАОУ ВПО БФУ им. И. Канта) ОСНОВНАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ НАПРАВЛЕНИЕ ПОДГОТОВКИ 100100 СЕРВИС ФГОС ВПО утвержден приказом Минобрнауки России от 17 сентября 2009 г. № Квалификация...»

«Министерство сельского хозяйства Российской Федерации Федеральное государственное образовательное учреждение высшего профессионального образования Московский государственный агроинженерный университет имени В.П.Горячкина Кафедра Информационно-управляющие системы Андреев С.А., Судник Ю.А., Юсупов Р.Х. ДИПЛОМНОЕ ПРОЕКТИРОВАНИЕ Методические указания для студентов факультета заочного образования по специальностям Электрификация и автоматизация сельского хозяйства и Профессиональное обучение со...»

«СМОЛЕНСКИЙ ГУМАНИТАРНЫЙ УНИВЕРСИТЕТ Родионова Н.В. Молчанова Н.В. ЮРИДИЧЕСКАЯ ПСИХОЛОГИЯ Учебно-методическое пособие (для студентов заочной формы обучения, обучающихся по специальности 030301.65 (020400)-Психология) Смоленск, 2008 1 1. СОДЕРЖАНИЕ УЧЕБНОЙ ДИСЦИПЛИНЫ Раздел I. Предмет и система юридической психологии. Социальные нормы и формирование правосознания личности. Тема 1. ПРЕДМЕТ, МЕТОДЫ И СИСТЕМА ЮРИДИЧЕСКОЙ ПСИХОЛОГИИ. Предмет юридической психологии, ее место в системе психологической...»

«ФЕДЕРАЛЬНОЕ АГЕНТСТВО ПО ОБРАЗОВАНИЮ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ИНСТИТУТ РАДИОТЕХНИКИ, ЭЛЕКТРОНИКИ И АВТОМАТИКИ (ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) А.И.Морозов ФИЗИКА ТВЕРДОГО ТЕЛА Кристаллическая структура Фононы УЧЕБНОЕ ПОСОБИЕ 2-е издание, переработанное Рекомендовано учебно-методическим объединением вузов Российской Федерации по образованию в области радиотехники, электроники, биомедицинской техники и автоматики в...»

«УЧИТЕЛЯ И ГИС Сазонтова Н.А., Шакирова А.Р. Томский государственный университет, г. Томск В статье дан анализ первого опыта преподавания геоинформационных технологий для учителей городских и сельских школ Томской области. Представлена содержательная часть программы обучения ГИС-технологиям. Рассмотрены проблемы, встречающиеся при реализации программы. THE TEACHERS AND GIS Sazontova N.A., Shakirova A.R. Tomsk state university, Tomsk In this article the analysis of the first experience of...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ УЧРЕЖДЕНИЕ ОБРАЗОВАНИЯ ПОЛОЦКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ КАФЕДРА ЛОГИСТИКИ И МЕНЕДЖМЕНТА МЕТОДИЧЕСКИЕ УКАЗАНИЯ по выполнению дипломной работы для студентов специальности 1-26 02 05 - Логистика Новополоцк 2013 1 УДК ББК Одобрены и рекомендованы к изданию методической комиссией финансовоэкономического факультета (протокол № от _ _ 20г.) Кафедра логистики и менеджмента Составители: Банзекуливахо Мухизи Жан, кандидат технических наук, доцент кафедры...»

«Муниципальное бюджетное общеобразовательное учреждение Средняя общеобразовательная школа №7 УТВЕРЖДЕНА приказом МБОУ СОШ №7 от 30.08.2013г. № 235 РАБОЧАЯ ПРОГРАММА по химии основное общее образование Программа составлена учителем химии Коломиец Викторией Игоревной г.Черногорск, 2013 2 1. Пояснительная записка 1.1. Рабочая программа по химии составлена в соответствии с нормативно-правовыми документами: Федеральным законом Российской Федерации от 29 декабря 2012 г. № 273-ФЗ Об образовании в...»

«КУЗНЕЦКИЙ ИНСТИТУТ ИНФОРМАЦИОННЫХ И УПРАВЛЕНЧЕСКИХ ТЕХНОЛОГИЙ (филиал ПГУ) КАФЕДРА СОЦИАЛЬНО – ЭКОНОМИЧЕСКИХ И ГУМАНИТАРНЫХ ДИСЦИПЛИН УЧЕБНОЕ ПОСОБИЕ ИСТОРИЯ ОТЕЧЕСТВЕННОГО ПРЕДПРИНИМАТЕЛЬСТВА И ФИНАНСОВ Часть 2 Кузнецк – 2005 г. И.Н. Камардин В.А. Плоткин История отечественного предпринимательства и финансов: Учебное пособие по дисциплине история предпринимательства и финансов./Кузнецк - 2005. -105С. Предлагаемое издание является учебным пособием по дисциплине история предпринимательства и...»

«МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования Забайкальский государственный университет (ФГБОУ ВПО ЗабГУ) МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ для аспирантов и соискателей к курсу кандидатского минимума по Истории и философии науки проректор по НиИР Фомина М.Н. Чита 2011 1 Современный ученый - это не только специалист в конкретной области научного знания, но и методолог. Методология научного...»

«Министерство образования и науки Российской Федерации Федеральное агентство по образованию Государственное образовательное учреждение высшего профессионального образования САМАРСКИЙ ГОСУДАРСТВЕННЫЙ АЭРОКОСМИЧЕСКИЙ УНИВЕРСИТЕТ им. академика С.П. КОРОЛЕВА Российская экологическая академия Самарское региональное отделение Соснина Т.Н. СТОИМОСТЬ: ИСТОРИКО-МЕТОДОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ Самара, 2005 ББК У02 (0) в 8 Стоимость: историко-методологическое исследование. Учебное пособие. Т.Н. Соснина:...»

«1 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ГОСУДАРСТВЕННОЕ ВЫСШЕЕ УЧЕБНОЕ ЗАВЕДЕНИЕ ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ М Е Т ОД И Ч Е С К И Е У К А З А Н И Я К ВЫПОЛНЕНИ Ю ЛАБОРАТОРНЫХ РАБОТ ПО ДИСЦИПЛИНЕ МАРКШЕЙДЕРСКОЕ ОБЕСПЕЧЕНИЕ БЕЗОПАСНОГО ВЕДЕНИЯ ГОРНЫХ РАБОТ Донецк – Д онНТУ – 2010 2 МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ ГОСУДАРСТВЕННОЕ ВЫСШЕЕ УЧЕБНОЕ ЗАВЕДЕНИЕ ДОНЕЦКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ М Е Т ОД И Ч Е С К И Е У К А З А Н И Я

«Министерство здравоохранения Ставропольского края Государственное бюджетное образовательное учреждение среднего профессионального образования Ставропольского края Пятигорский медицинский колледж Утверждаю СК едж МЕТОДИЧЕСКИЕ РЕКОМЕНДАЦИИ по подготовке и оформлению выпускных квалификационных работ Пятигорск, 2012 г. 1 СОДЕРЖАНИЕ 1. Цели и задачи выпускной квалификационной работы 3 2. Выбор темы выпускной квалификационной работы и её утверждение 3. Руководство выпускной квалификационной работой...»

«Министерство образования и науки, молодежи и спорта Украины Севастопольский национальный технический университет Кафедра радиотехники и телекоммуникаций МЕТОДИЧЕСКИЕ УКАЗАНИЯ по самостоятельному изучению дисциплины АНАЛОГОВЫЕ ЭЛЕКТРОННЫЕ УСТРОЙСТВА и выполнению контрольной работы для студентов направления 6.050901 — Радиотехника заочной формы обучения Севастополь 2013 2 УДК 621.375 Методические указания по самостоятельному изучению дисциплины Аналоговые электронные устройства и выполнению...»

«Министерство образования и науки Российской Федерации Сыктывкарский лесной институт (филиал) федерального государственного бюджетного образовательного учреждения высшего профессионального образования СанктПетербургский государственный лесотехнический университет имени С. М. Кирова Кафедра автомобилей и автомобильного хозяйства Н. П. Кузнецова АВТОСТРАХОВАНИЕ Учебное пособие Утверждено учебно-методическим советом Сыктывкарского лесного института в качестве учебного пособия для студентов...»

«Методическое объединение вузовских библиотек Алтайского края Вузовские библиотеки Алтайского края Сборник Выпуск 10 Барнаул 2010 ББК 78.34 (253.7)657.1 В 883 Редакционная коллегия: Л. В. Бобрицкая, И. Н. Кипа, Н. Г. Шелайкина, Е. А. Эдель, Т. А. Мозес Л. А. Божевольная. Гл. редактор: Н. Г. Шелайкина Отв. за выпуск: М. А. Куверина Компьютерный набор: Л. Н. Вагина Вузовские библиотеки Алтайского края: сборник: Вып. 10. /Метод. объединение вуз. библиотек Алт. края. – Барнаул: Изд-во АлтГТУ, 2010....»

«Министерство образования и науки РФ Федеральное государственное автономное образовательное учреждение высшего профессионального образования Сибирский федеральный университет ЭКОНОМИКА ПРЕДПРИЯТИЙ АВТОМОБИЛЬНОГО ТРАНСПОРТА Методические указания к лабораторным работам Красноярск 2012 УДК 656.078:338.2(07) ББК 65.373.3я73 Экономика предприятий автомобильного транспорта: учебное пособие / Ю.А. Хегай, В.В. Девинова, К.А. Мухина– Красноярск, 2012. Авторский коллектив: Юрий Александрович Хегай, Вера...»

«Анализ методической работы филиала МБОУ Сосновской СОШ №1 в с. Отъяссы за 2012- 2013 учебный год. Методическая работа осуществляется для педагогического сопровождения учителя в процессе его профессиональной деятельности и педагогической поддержки в соответствии с его профессиональными потребностями с целью достижения поставленных перед школой задач. Коллектив педагогов школы работал над единой методической темой Единая методическая тема школы: Обновление содержания и технологий образования,...»

«Наименование учебно-методических, методических и иных материалов (автор, место издания, № Наименование дисциплины по год издания, тираж.) учебному плану Иностранный язык Физическая культура 1.Методические рекомендации. Техника спортивного плавания 2009 год (ст. преподаватель Отечественная история Ремизова Е.Г.) Правоведение 2.Методические указания к обучению плаванию. Методика обучения техники плавания Философия способом брасс 2009 год (ст. преподаватель Ремизова Е.Г.) Экономика 3.Методические...»

«ДЕПАРТАМЕНТ ОБРАЗОВАНИЯ ГОРОДА МОСКВЫ ЮГО-ВОСТОЧНОЕ ОКРУЖНОЕ УПРАВЛЕНИЕ ОБРАЗОВАНИЯ ГОСУДАРСТВЕННОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА № 335 Модульная программа третьего урока физической культуры для 1-11 классов общеобразовательных учреждений Москва – 2012 2 Программа третьего урока физической культуры для 1-11 классов общеобразовательных учреждений разработана коллективом в следующем составе: учителя физической культуры общеобразовательных учреждений г. Москвы...»






 
2014 www.av.disus.ru - «Бесплатная электронная библиотека - Авторефераты, Диссертации, Монографии, Программы»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.