![]() Полезное:
Как сделать разговор полезным и приятным
Как сделать объемную звезду своими руками
Как сделать то, что делать не хочется?
Как сделать погремушку
Как сделать так чтобы женщины сами знакомились с вами
Как сделать идею коммерческой
Как сделать хорошую растяжку ног?
Как сделать наш разум здоровым?
Как сделать, чтобы люди обманывали меньше
Вопрос 4. Как сделать так, чтобы вас уважали и ценили?
Как сделать лучше себе и другим людям
Как сделать свидание интересным?
![]() Категории:
АрхитектураАстрономияБиологияГеографияГеологияИнформатикаИскусствоИсторияКулинарияКультураМаркетингМатематикаМедицинаМенеджментОхрана трудаПравоПроизводствоПсихологияРелигияСоциологияСпортТехникаФизикаФилософияХимияЭкологияЭкономикаЭлектроника
![]() |
Лекция 1. Состав и функции программного обеспечения вычислительных системГ.А.КИРЬЯНОВА
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ С++ курс лекций
часть 1
Москва-2012
Лекция 1 Состав и функции программного обеспечения вычислительных систем. Вычислительная система (ВС) – это автомат для обработки числовых, символьных, логических и других данных, представленных в цифровой форме. Для того, чтобы получить представление о ВС, необходимо изучить следующие вопросы:
Рассмотрим второй вопрос. ПО – это совокупность программ, предназначенных для эффективной эксплуатации компьютера. ПО имеет следующую структуру:
Системное ПО предназначено для организации вычислительных процессов, эффективного использования ресурсов ВС, а также для обеспечения взаимодействия пользователя с ВС. В состав системного ПО входят: - операционные системы; - драйверы; - утилиты. Операционная система (ОС) – это совокупность программ, обеспечивающих управление ВС и интерфейс между пользователем и ВС. К числу наиболее известных ОС относятся такие ОС, как PC DOS (MS DOS), OS/2, UNIX, Windows. Несколько слов об этих ОС. PC DOS разработана в 1981 г. фирмой Microsoft для 16-разрядных ПК. Она рассчитана на обслуживание одного пользователя и на решение одной задачи, т.е. в каждый момент времени ОС может вести диалог только с одним человеком и выполнять одну программу. Такой режим работы прост и эффективен, поскольку ОС нужно контролировать только одну программу, а пользователь может использовать все ресурсы ВС. Первая версия PC DOS 1.0 использовалась на ПК IBM PC. Позднее появились другие версии этой ОС. Каждая следующая является более усовершенствованной, нежели предыдущая. ОС PC DOS поддерживает многие языки программирования. ОС OS/2 была разработана совместно фирмами Microsoft и IBM в 1984 г. для 16- и 32- разрядных ПК. Она рассчитана на многозадачный режим работы одного пользователя, т.е. ОС обслуживает одного пользователя, но в каждый момент времени может выполнять несколько программ. OS/2 поддерживает многие системы програм-мирования и прикладные программы. ОС UNIX приобрела популярность в связи с её успешным использованием на мини- ЭВМ. Первая её версия появилась в 1969 г. Позднее подобная ОС была создана сотрудниками Калифорнийского университета в городе Беркли для 16- и 32-разрядных ПК. UNIX – это мощная ОС, ориентированная на мультипрограммный многопользо-вательский режим работы. Система написана на языке Си, поддерживает основные системы программирования и ППП. В настоящее время на практике широко используется операционная система Windows, в которую встроена ОС PC DOS.(Первая версия в 1983 г). Известны её такие версии, как Windows 3.1, Windows for workgroups 3.11, Windows 95, Windows 98, Windows 2000, Windows XP. ОС Windows разработана фирмой Microsoft для микропроцессоров Intel – 80386, 486, серии Pentium. Эта ОС предоставляет пользователю удобные средства для работы с окнами, меню, мышью; поддерживает многие языки программирования и прикладные программы. Драйвер – это системная программа, предназначенная для управления конкретной моделью устройства ВС. Каждое устройство ввода-выводав ВС имеет собственную систему команд, отличную от команд МП. Поэтому для управления этим устройством нужна специальная программа – драйвер. Например, драйвер для мыши, драйвер для принтера, графический драйвер. Утилиты – это вспомогательные программы, предназначенные для выполнения пользователем часто повторяющихся действий, например, форматирование дискеты, сжатие информации на диске, снятие копии экрана. Система программирования – это комплекс средств, предназначенных для создания и отладки программ пользователя. Система программирования включает: - язык программирования; - транслятор; - библиотеку функций; - отладчик; - редактор связей (компоновщик). Язык программирования – это средство, предназначенное для описания алгоритмов и данных. Каждый язык программирования имеет алфавит, синтаксис и семантику. Алфавит – это конечное множество символов, которое используется для написания текстов программ. Например, алфавит языка может включать латинские буквы, цифры, специальные знаки, ключевые слова. Синтаксис – это набор правил, определяющих допустимые конструкции языка. Например, на языке C++ конструкция <операция присваивания> имеет следующую синтаксическую структуру: <переменная>=<выражение>; Например: a=b+2; Семантика – это набор правил, в соответствии с которым истолковывается допустимая в данном языке конструкция. Например, конструкции <операция присваивания> соответствует следующее семантическое правило: <переменная> и <выражение> должны быть одного типа. В настоящее время существует много языков программирования. Среди них наиболее известны: Паскаль, Бейсик, С, С++, Пролог, Лисп, Java. Все языки в зависимости от степени близости, с одной стороны, к пользователю, а, с другой стороны, к компьютеру, можно классифицировать следующим образом:
Машинный язык – это язык машинных кодов. На этом языке записываются программы, готовые к выполнению. В настоящее время программы на машинном языке не пишутся. Язык ассемблера – это символическая форма записи машинных команд. Это средство позволяет получить короткий и быстродействующий код. Однако программирование на языке ассемблера является кропотливым и утомительным занятием. Чаще всего язык ассемблера используется в системном программировании. Процедурно-ориентированные языки предназначены для описания алгоритмов решения различных классов задач. Эти языки лишены недостатков, присущих языку ассемблера. Однако исполняемые модули, созданные компилятором с процедурно-ориентированного языка, менее эффективны с точки зрения размеров и времени выполнения, чем исполняемые модули, сгенерированные ассемблером. Впервые идея процедурного программирования появилась в 50-х -60-х годах 20 века. Суть этой идеи заключается в следующем. Пользователь разбивает алгоритм решения задачи на несколько блоков, а затем выбирает для реализации этих блоков оптималь-ные процедуры. Типичными примерами процедурно-ориентированных языков являются следующие языки. 1954 г. Джон Бэкус, IBM. FORTRAN – для решения многих классов научно-технических задач. 1960 г. Группа ученых. ALGOL-60 – для решения задач вычислительной математики. Введено понятие блока. 1961 г. Грейс Хоппер. Министерство обороны США. Cobol – для решения экономических задач. Удобные средства для ввода и вывода экономической информации. 1964 г. Группа ученых, IBM. PL/1 – многоцелевой язык для решения вычисли-тельных задач, задач управления объектами в реальном времени и задач системного программирования. 1964 г. Дж. Кемени, Т. Курц. BASIC – многоцелевой язык символических инструкций для начинающих. Получил широкое распространение при решении вычислительных задач на ПК. Много версий: GW Basic, Turbo Basic, True Basic, Visual Basic. По мере прогресса в области вычислительной математики акцент в программиро-вании стал смещаться с процедур в сторону организации данных. Появилась идея структурного программирования, основанная на использовании различных структур данных. Появились новые языки. 1971 г. Н. Вирт. Pascal – для обучения студентов структурному программированию. Позднее фирма Borland значительно расширила возможности языка. Версии: 3.0, 4.0, 5.0, 5.5, 6.0, 7.0. Каждая очередная версия является более усовершенствованной, нежели предыдущая. Среда Паскаля. 1972 г. Брайан Керниган, Денис Ритчи. С – блочно-структурированный язык профессионалов. Вобрал в себя лучшие черты языков Алгол, PL/1, Паскаль. Версии наиболее известные: Borland C, Turbo C, Visual C. Логическим следствием развития структурного программирования стал модульный подход к разработке программ. Идея модульного программирования заключается в объединении данных и процедур в единый модуль – автономно компилируемую программную единицу. Модули используются для разработки библиотек прикладных программ. В частности, фирма Borland включила в язык Pascal механизм модульного программирования. Начиная с языка Симула-67, в программировании наметился новый подход – ООП. Его основная идея заключается в стремлении связать данные с процедурами их обработки в единое целое – объект. Фактически ООП можно рассматривать как модульное программирование нового уровня, когда вместо механического объедине-ния процедур и данных акцент делается на их смысловую связь. 1980 г. Б.Страуструп. С++ - расширение языка С. Включены средства ООП, заимствованные из языка Simula-67. Позволяет создавать традиционные структуриро-ванные программы и объектно-ориентированные проекты. 1995 г. Группа авторов. Java – объектно-ориентированный язык. Похож на С++. Включены средства для создания апплетов – динамичных сетевых приложений, которые встраиваются в сети компьютеров. Проблемно-ориентированные языки предназначены для описания постановок задач. Например, входные языки ППП являются проблемно-ориентированными. Наряду с языком СП включает транслятор. Транслятор – это программа, предназначенная для перевода текста, записанного на языке высокого уровня, в машинные коды. Существует два способа трансляции текста: интерпретация и компиляция. В связи с этим СП может включать как компилятор, так и интерпретатор. (GW Basic – интерпретатор, Turbo Basic – компилятор). Интерпретатор преобразует каждую строку исходной программы в машинные коды и сразу выполняет их. Получение машинной программы с помощью компилятора осуществляется в 2 этапа: - компиляция исходной программы и создание объектного модуля; - сборка результатов компиляции редактором связей и формирование машинной программы. Редактор связей – это программа, преобразующая объектный модуль в машинную программу. Достоинством интерпретатора является возможность организации работы в режиме диалога. Компилятор формирует более эффективную машинную программу с точки зрения времени её выполнения. В настоящее время СП включает наряду с компилятором среду для работы с программами, что обеспечивает возможность отладки в режиме диалога. Отладчик – это набор средств, позволяющие обнаружить и быстро исправить имеющиеся в программе синтаксические и логические ошибки. Прикладное ПО предназначено для решения задач пользователя. Чаще всего прикладное ПО оформляется в виде ППП, представляющих собой набор процедур и входной язык для работы с ними. В состав прикладного ПО, кроме ППП входят: - текстовые редакторы; - табличные процессоры; - системы управления базами данных (СУБД); - прикладные программы пользователей. Текстовые редакторы предназначены для лиц, занятых созданием, редактированием и обработкой текстов. Примеры: WordPerfect, MSWord, Lexicon, MultiEdit. Табличные процессоры позволяют быстро создавать и обрабатывать табличные документы. Пример: Excel, SuperCalc4, Lotus 1-2-3. СУДБ позволяют создавать и обрабатывать базы данных. Они быстро осуществляют поиск информации по ключу, изменение и удаление данных. Пример: dBase, Paradox, FoxPRO, Clarion, ERwin.
Лекция 2. Общая характеристика процесса создания программного продукта. Уже много лет ученые всего мира работают над тем, чтобы научить компьютер понимать смысловое содержание фраз, сформулированных на естественном языке. Однако эта проблема чрезвычайно сложная в силу неоднозначности толкования фраз на естественном языке. В связи с этим, начиная с 60-х годов 20 века, ученые начали разрабатывать алгоритмические языки, которые в отличие от естественных языков обладают следующими свойствами: - любая фраза на алгоритмическом языке трактуется однозначно; - синтаксический анализ конструкций алгоритмического языка не зависит от смысла. Алгоритмический язык – это язык для описания алгоритма решения задачи. Что же такое алгоритм? В настоящее время существует теория алгоритмов, которая базируется на нескольких эквивалентных между собой строгих определениях алгоритма. В данном курсе мы не будем останавливаться на строгих определениях алгоритма, а приведем объяснения слова «алгоритм», которым ученые пользовались на протяжении нескольких веков. Под алгоритмом понимается точное предписание о выполнении в определенном порядке некоторой системы операций, ведущих к решению всех задач данного типа. Поскольку алгоритм, как система предписаний, носит формальный характер, то на его основе можно разработать программу действий для компьютера и осуществить машинное решение задачи. На ранних этапах программирования с программой имел дело один человек, её автор. Он разрабатывал программу, проводил её отладку, организовывал её выполнение на машине. Кроме того, большинство программ носило «разовый» характер, т.е. никем больше не использовалось. В настоящее время в связи с массовым выпуском компьютеров, расширением круга решаемых задач и круга пользователей, ситуация изменилась. Программа получила статус программного продукта, т.е. программа, изготовленная в одном коллективе, передается для использования другим коллективам, - точно так же, как и промышленное изделие. Итак, программный продукт – это программа с соответствующей документацией, рассчитанная на применение многими пользователями в различных условиях. Рассмотрим процесс создания и эксплуатации программного продукта («жизненный цикл» программного продукта). Этот процесс состоит из нескольких этапов. 1. Разработка технического задания. На этом этапе формулируется постановка задачи и требования к программе, приводится описание функционирования и экономическое обоснование создаваемой программы. 2. Разработка технического проекта. На основе анализа постановки задачи выбирается математическая модель и разрабатывается алгоритм. 3. Создание рабочего проекта. На этом этапе организуется выбор системы программирования, написание программы, реализуется отладка программы и подготавливается документация. 4. Эксплуатация и сопровождение программы. На этом этапе совершенствуют программу, если в этом возникает необходимость, с целью повышения её эффективности или удобства использования в новых условиях. Основные технологии программирования В настоящее время широко используются следующие технологии программирования: - структурное программирование; - модульное программирование;
- объектно-ориентированное программирование; - визуальное программирование. Например, в языке Pascal содержится средства структурного и модульного программирования, в языке Java – средства ООП, в языке C++ - средства структурного и ООП. Рассмотрим концепцию структурного программирования, а позднее изучим ООП. В основу технологии современного структурного программирования положены следующие принципы: 1. Блочный принцип построения структуры программы; 2. Принцип использования иерархии блоков; 3. Принцип нисходящего проектирования программ (пошаговая детализация); 4. Использование фиксированного набора базисных конструкций для реализации блоков и структуры программы; 5. Следование определенному стилю программирования. Проектирование структуры программы методом нисходящего программирования Программа для компьютера представляет собой последовательность команд, позволяющих по набору исходных данных получить результаты.
x0 – начальное приближение к решению; Е – погрешность решения; x – решение; n – число итераций. Такая схема называется hipo-диаграммой. Существуют различные структуры программ. Небольшие по объему программы могут иметь монолитную структуру. Однако при решении достаточно сложной задачи написать последовательно единую программу от начала до конца, обычно, невозможно.В связи с этим структуру сложной программы можно строить методом нисходящего или восходящего проектирования. Главная идея нисходящего подхода состоит в следующем. Сначала в задаче выделяется небольшое число (3-5) достаточно самостоятельных, более простых подзадач, а в проектируемой программе намечается соответствующее число блоков, определяется назначение каждого из них, порядок выполнения этих блоков и их связи между собой. На этом шаге детализации можно определить лишь функциональное назначение каждого блока (что он должен делать, какие данные являются исходными для этого блока и что является результатом его выполнения). Если некоторые из первоначально выделенных подзадач оказываются достаточно сложными, то к каждой из них можно применить аналогичную процедуру – это будет второй шаг детализации. Процесс детализации продолжается до тех пор, пока каждый из выделенных блоков не окажется настолько простым, что его программирование уже не вызывает трудностей. В результате получается блочно-иерархическая структура программы:
Метод нисходящего проектирования позволяет вести разработку программы коллективу программистов (каждый блок можно разрабатывать и отлаживать автономно). Если на каждом шаге детализации использовать принципы структурного программирования, то это обеспечит хорошую структурированность программы. Способы описания алгоритмов. Базисные управляющие конструкции. Предположим, что схема иерархии блоков построена; для каждого блока выбрана математическая модель и определены входные и выходные данные. Далее необходимо написать алгоритмы, соответствующие блокам. Рассмотрим способы описания алгоритмов. Наиболее распространенными являются: - словесное описание алгоритма; - формульно-словесное описание алгоритма; - язык схем алгоритмов (блок-схем); - язык программирования. Язык схем алгоритмов Схема алгоритма изображает шаги обработки данных и последовательность их выполнения с помощью логического соединения геометрических фигур. Геометрические фигуры определены государственным стандартом (Гост ЕСПД – единая система программной документации). Основные элементы схем алгоритмов:
- начало алгоритма
- конец алгоритма
- вычисление по формуле
- в/в информации
противном случае вправо
Структурированная схема алгоритма строится с помощью базисных конструкций. Базисные конструкции
3. Структуры ветвления 3.1. Альтернатива
![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() да
Если - то - иначе если – то
3.2. Выбор
4. Циклические структуры
4.1. Цикл с предусловием
Да
4.2. Цикл с постусловием
Итак, для построения структурированной схемы алгоритма можно использовать метод нисходящего проектирования (от сложного к простому) и на каждом шаге детализации для реализации блоков применять базисные конструкции. Существует другой подход к построению структурированной схемы – восходящее проектирование (от простого к сложному). ООП – восходящее программирование. Мы его изучим позднее.
Пример проектирования структурированной схемы алгоритма. Постановка задачи: вычислить значения функции z=f(x,y) x1≤x≤x2, ∆x y1≤y≤y2, ∆y
1. Построение hipo – диаграммы (1 шаг детализации) 2. Построение укрупненной схемы алгоритма (2 шаг детализации) Предположим, что исходные данные заданы корректно.
3. Детализация блока 3 (3 шаг детализации)
4. Детализация блока 3.3 (4 шаг детализации)
|