- •Конспект лекций
- •Информатика для студентов, обучающихся по направлению
- •151900 «Конструкторско-технологическое обеспечение машиностроительных производств»
- •Содержание
- •Лекция №1
- •1.1. Концепции информации
- •1.2. Социальная информация
- •1.3. Признаки информации.
- •1.4. Свойства информации.
- •Лекция №2
- •Лекция №4
- •Система управления базой данных
- •Классификация баз данных
- •Структурные элементы базы данных
- •Виды моделей данных
- •Иерархическая модель данных
- •Сетевая модель данных
- •Реляционная модель данных
- •Понятие нормализации отношений
- •Производительность субд
- •Лекция №5 принцип построения компьютерных сетей
- •Загрузочные вирусы
- •Полиморфные вирусы
- •Лекция №6
- •Лекция №7
- •Лекция №8
- •Лекция №9
- •Библиографический список
Лекция №8
Введение в программирование на ЭВМ.
Подобно другим сложным системам вычислительные системы требуют удовлетворительного лингвистического обеспечения, служащего для адекватного описания систем и их функционирования, а также описания обрабатываемой информации. Для лингвистического обеспечения вычислительные системы и их ПО служат формальные языки различного изобразительного уровня и назначения. Не вникая в несущественные для нашего изложения детали, лингвистическое обеспечение современных вычислительных систем можно в общем случае охарактеризовать формальными языками пяти высших уровней.
Языков высокого уровня существует довольно много, и каждый из них предназначен для решения своих задач: один – лучше по одному критерию (краткости, ясности, простоте), другой – по другому. Этим и объясняется обилие и многообразие языков общения с ЭВМ – каждый из них создавался для решения своего класса задач, определенного типа ЭВМ и уровня подготовки пользователей.
Так, например, программы вычислений обычно пишут на языках типа Фортран или Алгол, неискушенные в программировании пользователи предпочитают Бейсик.
Все эти языки относятся к языкам высокого уровня, которые не требуют от пользователя больших знаний устройства и функционирования ЭВМ. Они
делятся на универсальные и специализированные, ориентированные на очень узкий класс задач.
Во всех этих языках для изображения операторов, переменных, меток используют английский язык. Причина этого вовсе не в каких-то специальных удобствах английского языка, а в том, что сами языки высокого уровня и первые программы на них появились в англоязычных странах. И хотя есть хорошие русские варианты этих языков, программисты, а вслед за ними и пользователь ЭВМ, обычно предпочитают английские “оригиналы”, ведь программы на них понятны всему миру.
Первый и самый распространенный по сей день язык высокого уровня – Фортран (сокращение слов “ФОРмульный” “ТРАНслятор”) был создан в 1956 году. Фортран называют “вечным языком” - он обязательно входит во все существующие программные системы и наверняка будет входить в будущем. Он все время совершенствуется: его известные версии Фортран – II, Фортран – IV, Фортран – 77 (версия 1977г.).
Фортран хорош всем, единственный его недостаток – сложность для многих пользователей.
Классификация языков программирования
В настоящее время насчитывается свыше 3500 различных языков программирования, среди которых только весьма ограниченное количество имеют достаточно частое использование, и совсем немногие носят массовый характер при разработке ПО. Ввиду обилия языков программирования для них существует целый ряд классификаций. Мы рассмотрим только одну из них (рис. 1.).
Языки программирования
Функциональные
Операторные
Машинно- зависимые
Машинно- ориентированные
Универсаль-ные
Проблемно- ориентированные
Пролог
Лисп
GPSS
Ассемблер
Си
АПЛ
Бейсик
Кобол
Лого
Снобол
Фортран
Объектно- ориентированные
Паскаль
Модула - 2
ПЛ/М
Ада
Смолток
Форт
Рис. 1. Классификация языков программирования.
Современные языки программирования.
Основа современных языков программирования – предметно-ориентированные языки, которые включают в себя все возможности как операторных, так и функциональных языков.
Над созданием научно-обоснованных языков программирования трудилась международная группа ученых. Первым таким языком стал Алгол.
Он был создан в 1960 году (первую его версию называют Алгол - 60) и оказал большое влияние на развитие языков программирования.
Язык Паскаль является прямым развитием линии Алгола. Он создан швейцарским математиком Н.Виртом в 1969 году.это очень компактный язык. Транслятор с Паскаля прост и занимает мола места в ОЗУ.
Язык Ада (1979г.) – продолжение линии Алгола. Его основное назначение – программирование работы самых разнообразных систем управления.
Все вышеперечисленные языки являются языками вычислений.
Одной из важнейших не вычислительных функций ЭВМ является моделирование, для которого используются специальные языки.
Универсальные языки моделирования: GPSS, Симула, Симскрит.
Паскаль и Си. Эти языки используются программистами-профессионалами. Трансляторы с этих языков работают в режиме компиляции, что позволяет создавать эффективные программы. Важным свойством этих языков для построения больших программных систем является модульность.
Фортран и Кобол. Эти языки имеют очень точно определенные области применения. Фортран традиционно используется при разработке программ для решения инженерных задач, а Кобол – экономических.
Алгоритмические языки программирования.
В практике программирования алгоритмы принято описывать с помощью алгоритмических языков программирования.
В качестве таких языков могут использоваться языки программирования различного уровня, начиная от машино-ориентированных языков программирования, и заканчивая языками высокого уровня.
При разработке конкретного языка прежде всего необходимо позаботиться о его универсальности, т.е. возможности представить на нем произвольный алгоритм. Для этого достаточно убедиться в том, что данный язык позволяет выполнять “команды машины Поста”:
запись информации в ячейки памяти;
доступ к различным ячейкам памяти;
команды условного перехода;
команды остановки.
Все современные языки обладают такими свойствами. Таким образом обеспечивается алгоритмическая универсальность языка программирования, и необходимо позаботиться об удобстве программирования.
При этом появляются десятки и сотни операторов, представляющих операции сравнительно высокого уровня:
арифметические операторы;
операторы циклов;
условные операторы;
операторы управления памятью;
операторы вызова подпрограмм.
При программировании неформальных процедур оценим трудоемкость ее программирования. Необходимо описать все n - правил. Компонента трудоемкости пропорциональна количеству правил n и коэффициента α1, который зависит от языка программирования и специфики процедуры.
Вторая компонента
учитывает целостность комплекса, т.е.
взаимодействие этих правил, которая в
среднем пропорциональна n2
(таблица), которая имеет коэффициент
β.
q=an+βn2
По данному выражению находят суммарную трудоемкость программирования задачи.
Т
рудоемкость
алгоритмического программирования
растет пропорционально квадрату числа
операторов. Повышение уровня
программирования позволит уменьшить
коэффициенты α и β.
Для уменьшения трудоемкости необходимо избежать кропотливого указания всех связей (между различными правилами), чтобы избежать квадратичного роста трудоемкости.
Желательно иметь такой способ программирования, при котором отдельные операторы независимы с точки зрения программиста и он может свободно вычеркивать ненужные и добавлять новые операторы.
Язык Basic Microsoft. Основные группы операторов.
В связи с тем, что Фортран оказался довольно сложным языком для пользователей, на его базе был изобретен более простой язык – Бейсик (английская аббревиатура – BASIC означает: многоцелевой язык символических инструкций для начинающих). Главное его достоинство – простота.
Бейсик имеет несколько “диалектов”:
Бейсик;
Бейсик-плюс;
Расширенный Бейсик и др.
Basic был создан Дж. Кемени и Т. Курцем в 1965 г. для вводного курса по информатике. Со временем Basic превратился в один из наиболее массовых языков, особенно с появлением ЭВМ класса ПК, для которых он стал первым ЯВУ и операционной средой одновременно. Действительно, компьютеризация с привлечением большого числа непрофессиональных пользователей ВТ сделала весьма актуальным вопрос быстрого приобщения значительной части из них к программной технологии, что потребовало повысить уровень их компьютерной грамотности и заложить основы программирования. Basic действительно оказался легким для освоения не только малоподготовленными, но и весьма далекими от программирования пользователями. Так как Basic значительное время был и остается одним из основных инструментальных средств ПК — наиболее массовой ВТ в учебных заведениях различных уровней, он входит в программы большинства курсов по информатике и вычислительной технике, а ознакомление с ним является первым шагом профессиональной подготовки большинства потенциальных пользователей современной ВТ.
Популярность языка и все возрастающее количество знакомых с ним пользователей, бурный рост различного типа ПК привели к созданию целого ряда версий языка Basic, реализованных на уровне как компиляторов, так и интерпретаторов для ЭВМ различных типов и классов. Наиболее известные версии языка Basic (для IBM-совместимых ПК), Ms QuickBasic и Turbo-Basic фирмы Borland, существенно расширившие возможности исходного языка, оставляют его среди наиболее популярных и массовых языков не только обучающих, но и инструментальных средств по разработке ПО для класса ПК
Основные версии языка имеют различные интерпретаторы и компиляторы, что обусловливает его широкое применение. Наиболее популярной и распространенной версией является версия Basic'aww IBM-совместимых ПК; данный диалект языка обладает достаточно развитыми выразительными средствами и является одним из наиболее распространенных диалектов данного класса. Однако следует отметить, что данный диалект в целом ряде случаев уступает диалекту языка для ПК WANG 2200MVP (ИСКРА-226), особенно в плане работы со сложными программными конструкциями в среде самого языка. В целом, среда диалекта Basic для IBM-совместимых ПК более ориентирована на проблемного пользователя.
Для ЭВМ класса ПК Basic реализован как стандартное средство для обучения основам профессионального программирования. Для удобства разработки ПО в среде Basic создан ряд систем программирования, из которых выделяются системы Quick-Basic фирмы Microsoft и Turbo-Basic фирмы Borland, обладающие достаточно развитыми средствами по созданию, редактированию и отладке ПО и наряду с этим позволяющие создавать высокоэффективное ПО, которое может использоваться и вне среды Basic -системы. С системами могут поставляться развитые библиотеки программ; среди обеспечиваемых ими средств можно отметить такие, как: создание БД, расширение графических функций и т.д. Создаются и проблемно-ориентированные диалекты языка, например VisualBasic, для обеспечения расширенных графических функций и др.
Технология программирования.
Технология программирования включает в себя написание программ на языках программирования и организацию их выполнения с использованием комплекса программно-технических средств ЭВМ.
При разработке программ используется технология двух видов:
сверху вниз – вначале разрабатывается главная программа, а затем входящих в нее составных компонентов (подпрограмм);
снизу вверх – вначале разрабатываются подпрограммы (начиная с элементарных), а затем разрабатывается главная программа, использующая разработанные программные компоненты.
Важное звено технологии – выбор языка программирования и соответствующей программной среды (операционной системы). Он проводится на этапе разработки алгоритма с учетом особенностей последнего и возможностей имеющихся средств ЭВМ, а также с учетом простоты написания программы, удобства отладки, эффективности и надежности программы.
Эффективность программ определяется затрачиваемым машинным временем и требуемым объемом памяти ЭВМ и другими ресурсами.
При разработки программ необходимо помнить, что программа должна быть:
универсальной, т.е. не зависеть от конкретного набора данных;
гибкой, т.е. легко настраиваться на изменение параметров решаемой задачи;
мобильной, т.е. легко переносимой на другие типы ЭВМ с учетом их прикладного обеспечения;
надежной, т.е. иметь средства защиты от неправильного ввода данных, неопределенных параметров и случайных сбоев.
При составлении и отладке программ целесообразно использовать в операторах языка программирования переменные, а не константы; в тексте программы – комментарии, позволяющие легко проследить за функциями и логической взаимосвязью отдельных частей программы; приемы, повышающие эффективность программы такие, как: 1. использование операций умножения вместо возведения в степень; 2. исчисление часто используемого арифметического выражения один раз с присвоением его значения переменной для последующего использования в программе; 3. использование при организации циклов в качестве границ индексов переменных, а не выражений, которые вычислялись бы при каждом прохождении цикла; 4. выполнение всех повторяющихся с одинаковыми данными вычислений до входа в цикл.
Кроме того, следует проводить тестирование и отладку отдельно для логически самостоятельных частей программы, предусматривать в программе вспомогательные операторы STOP и вывода для отладки; использовать для тестирования небольшие контрольные примеры.
К современным методам программирования относятся:
автоматизация программирования;
модульное программирование;
структурное программирование.
Автоматизация программирования предусматривает использование готовых программ, в частности, пакетов прикладных программ и библиотек стандартных программ; дальнейшее развитие – составление программ для ЭВМ самой ЭВМ.
Модульное программирование – независимое программирование каждого модуля. Включение модуля в основную программу проводится после его полной отладки и тестирования.
Структурное программирование – процесс программирования на алгоритмическом языке с использованием определенных конструкций. При структурном программировании программа составляется на базе линейной, разветвленной или циклической алгоритмической структур и между этими структурами передача управления производится только вперед (сверху вниз в блок-схеме); использование команд безусловной передачи управлению недопустимо.
Структурный подход к проектированию программ.
Надо отметить, что компьютер выполняет только то, что заложит в него человек.
От качества разработанного алгоритма, а затем программы зависят функции компьютера, его возможности.
На начальном этапе развития вычислительной техники, когда задачи носили преимущественно расчетный характер и использовались простейшие формулы, процесс алгоритмизации и программирования носил сугубо индивидуальный характер.
Критерием качества программ служили два показателя:
обеспечение наиболее высокой скорости работы;
использование минимальных размеров памяти.
Это было обусловлено низким быстродействием ЭВМ, малыми объемами памяти, ограниченным количеством сеансов связи при работе пользователя на ЭВМ
Занимались программированием исключительно только специалисты по вычислительной технике, чаще всего математики-программисты. Квалификация программиста определялась, прежде всего, тем, насколько он мог хорошо составлять программы в соответствии с критериями того времени. В таких случаях практически всегда программы были сложными, кроме разработчика в них никто не мог разобраться.
С течением времени программное обеспечение стало настолько дорогим, что подчас превышало стоимость компьютера в несколько раз. Кроме того, при программировании на современном компьютере, обладающем высоким быстродействием и большими объемами памяти, становятся уже несущественными, какой объем занимает программа и сколько времени она решается в компьютере.
Второй важный аспект, который некоторые профессиональные программисты, работающие по традиционной схеме, стараются не замечать – отладка программ.
Необходимо было кардинально изменить подход к проектированию программ, чтобы создание программ стало технологическим процессом, как и производство любого технического устройства. Однако разработать технологический процесс создания программ, поставить его на промышленную основу оказалось делом нелегким и по сей день не решенным.
Существенным шагом на пути снижения трудоемкости создания программ при одновременном повышении их качества, надежности и возможности использования в массовом порядке является структурное проектирование.
Основные принципы структурного проектирования:
нисходящее проектирование;
модульное программирование;
структурное программирование (кодирование);
структурный контроль.
Нисходящее проектирование основано на иерархическом подходе к решению задач, целесообразно применять на первом и втором этапах, когда формируется постановка задачи и выбирается математический аппарат.
Вначале на верхнем уровне иерархии выделяем главную функцию, которую надо решить; чаще всего этой функцией служит цель поставленной задачи. Затем происходит постепенная детализация функции. На следующем уровне иерархии располагаются функции, которые позволяют выполнить главную функцию. На следующем уровне – функции, которые позволяют выполнить функции верхнего уровня иерархии и т.д.
Каждая функция заключается в прямоугольник и с помощью линий связывается с функциями предыдущего и последующих уровней. В дальнейшем эти функции, имеющие самостоятельное значение, принято называть модулями.
У
ровень
1…………………. Главная функция
Модуль 1
Модуль 2
Модуль 3
2……………………
Модуль А
Модуль К
Модуль М
Модуль Р
3
…………
Модуль В
Модуль С
Модуль А
Модуль К
4……………….
При построении иерархической схемы надо придерживаться следующих правил:
1. каждый модуль может быть связан только с одним модулем верхнего уровня и несколькими модулями нижнего уровня. При этом он имеет один вход. Выход на модули нижнего уровня тоже один, так как если модуль верхнего уровня вызывает модуль нижнего уровня, то после его выполнения управление может быть передано в модуль верхнего уровня, который уже может вызвать другой модуль нижнего уровня. Наличие нескольких выходов из модуля верхнего уровня означает, что модули нижнего уровня подчиняются модулям верхнего уровня.
2. связи между модулями организуются сверху вниз.
если следует организовать обращение к одному модулю, то его надо нарисовать столько раз и в тех местах, где он необходим. Такой модуль специально помечается двумя вертикальными чертами справа и слева и будет реализован в виде одной программы.
Надо отметить, чем более тщательно и подробно проведено нисходящее проектирование, тем проще осуществить программирование и отладку программ.
Модульное программирование - независимое программирование каждого модуля. Программирование обычно ведут начиная с верхнего уровня. Вначале составляется программа для ограниченного числа модулей верхнего уровня и производится тестирование всей задачи, при этом остальные модули не программируются, а для них делают так называемые заглушки. Например, часто используется оператор печати.
Недопустимо вводить в программу одновременно несколько модулей. После разработки очередного модуля он подключается к основной программе и производится тестирование.
Каждый новый модуль включается в основную программу только после того, как проведено его полное тестирование.
Структурное программирование (кодирование) – процесс программирования на алгоритмическом языке с использованием определенных конструкций. Основные положения структурного программирования:
1. любая программа составляется на базе основных алгоритмических структур трех видов: линейного, разветвляющего и циклического.
2. между этими структурами производится передача управления только вперед, что соответствует в блок-схеме направлению линий сверху вниз.
3. недопустимо пользоваться в программе специальной командой безусловной передачи управления из одного места программы в другое (например, GOTO).
Структурное кодирование применяется для программирования отдельных модулей. Вначале на основе положений 1, 2, 3 разрабатывается алгоритм, а затем базовые алгоритмические конструкции заменяются соответствующими конструкциями конкретного языка.
Структурный контроль необходим при разработке сложных задач, включающих десятки и сотни модулей. Это новая форма контроля процесса разработки программ, в которой участвует несколько человек. По мере продвижения в разработке задачи периодически определенной группе сотрудников раздаются рабочие материалы по данной задаче. Они знакомятся с ними, а затем на совместном обсуждении выявляются недостатки данного этапа, которые разработчик программы должен в ближайшее время устранить.
Особенно эффективен такой контроль при постановке и алгоритмизации задачи, когда закладываются основы всей системы.
