- •1. ИНФОРМАЦИЯ, ЕЁ СВОЙСТВА, ИЗМЕРЕНИЕ, ПРЕДСТАВЛЕНИЕ И КОДИРОВАНИЕ
- •1.1. Информатика – предмет и задачи
- •1.2. Информация, ее виды и свойства
- •1.3. Представление об информационном обществе
- •1.4. Кодирование информации
- •1.5. Практическое занятие № 1. Системы счисления. Перевод чисел из одной системы счисления в другую. Арифметические операции в позиционных системах счисления
- •1.6. Кодирование текстовых и символьных данных
- •1.7. Кодирование графических данных
- •1.8. Кодирование звуковой информации
- •1.9. Структуры данных
- •1.10. Файлы и файловая структура
- •1.11. Измерение и представление информации
- •1.12. Теоремы Шеннона
- •1.13. Математические основы информатики
- •1.13.1. Алгебра высказываний (алгебра логики)
- •1.13.2. Элементы теории множеств
- •2. ВЫЧИСЛИТЕЛЬНАЯ ТЕХНИКА
- •2.1. История развития вычислительной техники
- •2.2. Классификация компьютеров по сферам применения
- •2.3. Базовая система элементов компьютерных систем
- •2.4. Функциональные узлы компьютерных систем
- •2.5. Архитектура ЭВМ
- •2.6. Совершенствование и развитие архитектуры ЭВМ
- •2.6.1. Архитектуры с фиксированным набором устройств
- •2.6.2. Открытая архитектура
- •2.6.3. Архитектура многопроцессорных вычислительных систем
- •2.7. Внутренняя структура ЭВМ
- •2.7.4. Внешние запоминающие устройства
- •2.8. Внешние устройства компьютера
- •2.8.1. Видеотерминалы
- •2.8.2. Устройства ручного ввода информации
- •2.8.3. Устройства печати
- •2.8.4. Устройства поддержки безбумажных технологий
- •2.8.5. Устройства обработки звуковой информации
- •2.8.6. Устройства для соединения компьютеров в сеть
- •3. ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ ЭВМ
- •3.1. Состав системного программного обеспечения
- •3.2. Операционные системы
- •3.3. Виды операционных систем и их базовые понятия
- •3.4. Процессы и потоки
- •3.5. Управление памятью
- •3.6 Организация ввода-вывода
- •3.7 Драйверы устройств
- •3.8 Файловые системы
- •3.9 Файловые системы Microsoft Windows
- •3.9.1. Файловая система FAT16
- •3.9.3. Файловая система NTFS
- •3.9.4. Сравнение файловых систем FAT16, FAT32 и NTFS
- •3.10 Операционная система Windows
- •3.11 Служебные программы
- •3.13 Прикладное программное обеспечение
- •3.13.1. ППО общего назначения
- •3.13.2. ППО специального назначения
- •3.17. Практическое занятие № 6. Табличный процессор Excel. Основные понятия и общие принципы работы с электронной таблицей. Создание и заполнение таблиц постоянными данными и формулами. Построение диаграмм и графиков
- •3.18. Практическое занятие № 7. Табличный процессор Excel. Сортировка и фильтрация (выборка) данных. Сводные таблицы, структурирование таблиц. Расчёты в Excel
- •4. БАЗЫ ДАННЫХ (БД) И СИСТЕМЫ УПРАВЛЕНИЯ БАЗАМИ ДАННЫХ (СУБД)
- •4.1. Базы данных в структуре информационных систем
- •4.2. Классификация баз данных и виды моделей данных
- •4.3. Нормализация отношений в реляционных базах данных
- •4.4. Проектирование баз данных
- •4.5. Этапы развития СУБД. Реляционная СУБД Microsoft Access – пример системы управления базами данных
- •4.6. Практическое занятие № 8. СУБД Access 97. Создание однотабличной базы данных. Отбор данных с помощью фильтра. Формирование запросов и отчётов для однотабличной базы данных
- •5. КОМПЬЮТЕРНЫЕ СЕТИ И ОСНОВЫ ЗАЩИТЫ ИНФОРМАЦИИ
- •5.1. Назначение и классификация компьютерных сетей
- •5.2. Режимы передачи данных в компьютерных сетях
- •5.3. Типы синхронизации данных при передаче и способы передачи информации
- •5.4. Аппаратные средства, применяемые при передаче данных
- •5.5. Архитектура и протоколы компьютерных сетей
- •5.6. Локальные вычислительные сети (ЛВС) и их топологии
- •5.7. Физическая передающая среда ЛВС и методы доступа к ней
- •5.8. Примеры сетей. Глобальная сеть Интернет
- •5.9. Службы сети Интернет
- •5.10. Поиск информации в Интернет
- •5.10.1. Поисковые машины
- •5.12. Основы и методы защиты информации
- •5.13. Политика безопасности в компьютерных сетях
- •5.14. Способы и средства нарушения конфиденциальности информации
- •5.15. Основы противодействия нарушению конфиденциальности информации
- •5.16. Криптографические методы защиты данных
- •5.17. Компьютерные вирусы и меры защиты информации от них
- •6. ОСНОВЫ АЛГОРИТМИЗАЦИИ И ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ. МОДЕЛИ И ИНФОРМАЦИОННОЕ МОДЕЛИРОВАНИЕ
- •6.1. Алгоритм и его свойства
- •6.1.2. Графическое представление алгоритмов
- •6.2. Принципы разработки алгоритмов и программ для решения прикладных задач
- •6.2.1. Процедурное программирование
- •6.2.3. Функциональное программирование
- •6.2.4. Логическое программирование
- •6.2.5. Объектно-ориентированное программирование (ООП)
- •6.3. Методы и искусство программирования
- •6.4. Обзор языков программирования
- •6.5. Понятие о метаязыках описания языков программирования
- •6.6. Моделирование как метод решения прикладных задач
- •6.7. Основные понятия математического моделирования
- •6.8. Информационное моделирование
- •6.9. Практическое занятие № 11. Вычисления в среде Mathcad
- •6.10. Практическое занятие № 12. Вычисления в среде Matlab
- •СПИСОК ЛИТЕРАТУРЫ
- •ОГЛАВЛЕНИЕ
Если программа небольшая, то некоторые пункты не являются актуальными и их можно опустить, но большой программный проект требует проработки всех упомянутых пунктов.
При постановке задачи определяются требования к программе, её цель, свойства и функции, характеристики интерфейса, исходные и выходные данные. Это очень важный этап, т. к. неправильное формулирование требований приводит к выполнению ненужной ра- боты и вызывает перерасход средств и времени.
Проектирование программы – это разработка структуры программной системы на уровне модулей методом декомпозиции. Декомпозиция используется для разбиения про- граммы на компоненты, которые затем могут быть объединены.
При разработке моделей программы используются два метода: дедуктивный и индук- тивный. Дедуктивный метод подразумевает, что модель разрабатываемой программы явля- ется частным случаем имеющейся более общей модели. Тогда общую модель можно приспо- собить к данному частному случаю. Индуктивный метод предполагает итеративное уточне- ние создаваемой модели путем предположений, анализа, моделирования.
Разработка и реализация алгоритма – самый трудоёмкий этап. Выбор метода решения задачи зависит от построенной модели. Реализация алгоритма включает кодирование и тес- тирование. Этот этап зависит от того, какой язык программирования выбран, на каком ком- пьютере алгоритм будет реализован.
Анализ алгоритма и выявление особенностей его работы тесно связаны с последним этапом – отладкой и тестированием программы. Анализируется устойчивость работы про- граммы при воде недопустимых или критических значений, при неверных действиях пользо- вателя или сбоях аппаратуры. Таким образом выявляются ошибки программы. Процесс тес- тирования чаще всего бывает пошаговым и начинается с тестирования отдельных модулей.
Каждому конечному программному продукту необходимо документированное сопро- вождение в виде помощи (help) и файлового текста (readme.txt).
6.4.Обзор языков программирования
6.4.1.Системы программирования. Писать все программы в машинных кодах очень сложно и трудоёмко. Поэтому сегодня практически все программы создаются с помощью языков программирования – искусственных языков. От естественных они отличаются огра- ниченным числом слов, значение которых понятно транслятору, и очень строгими правила- ми записи команд. Совокупность требований к правилам записи команд называется синтак- сисом языка программирования, а смысл каждой команды определяется семантикой языка. Процесс поиска ошибок в программе называется тестированием, а процесс устранения ошибок – отладкой.
С помощью языка программирования создаётся не готовая программа, а только её текст, описывающий ранее разработанный алгоритм. Этот текст надо перевести в машинный код, для этого служат программы-компиляторы или программы-интерпретаторы.
Интерпретатор берёт очередной оператор языка из текста программы, анализирует его структуру и затем сразу исполняет. Только после того, как текущий оператор выполнен, ин- терпретатор переходит к следующему. При этом, если один и тот же оператор выполняется в программе многократно, интерпретатор всякий раз будет выполнять его так, как будто встре- тил впервые. Вследствие этого программы выполняются медленно.
Компиляторы полностью обрабатывают весь текст программы и автоматически пере- водят его на машинный язык, т. е. генерируют машинный код. При этом часто выполняется оптимизация, повышающая быстродействие программы путём исключения ненужных ко- манд и промежуточных вычислений. В результате законченная программа получается ком- пактной и эффективной и работает в сотни раз быстрее программы, полученной с помощью
244
интерпретатора. Основной недостаток компиляторов – трудоёмкость трансляции языков программирования, ориентированных на обработку данных сложной структуры.
С помощью интерпретатора, наоборот, допустима остановка программы, исследова- ние содержимого памяти, организация диалога с пользователем, т. е. с его помощью можно понять принцип работы любого отдельного оператора языка. В реальных системах програм- мирования перемешаны технологии и компиляции и интерпретации.
В самом общем случае для создания программы на выбранном языке программирова- ния нужно иметь следующие компоненты:
qтекстовый редактор. Подобные редакторы созданы для всех популярных
языков и могут автоматически проверять правильность синтаксиса программы непосредственно о время её вода;
qпрограмма-компилятор, переводящая текст в машинный код и отслеживающая синтаксические ошибки. Компилятор выдаёт так называемый объектный код;
qобъектный код обрабатывается специальной программой – редактором связей. Исходный текст большой программы, как правило, состоит из нескольких мо- дулей, кроме того, добавляются программы, реализующие различные стан- дартные функции из библиотек. Всё это редактор связей превращает в машин- ный код, исполняемый для конкретной платформы. Исполняемый код – это за- конченная программа, которую можно запускать на любом компьютере, где
установлена операционная система, для которой эта программа создавалась. Итак, для создания программы нужно:
∙текстовый редактор;
∙компилятор;
∙редактор связей;
∙библиотека функций.
Всовременных интегрированных системах имеется ещё один компонент – отладчик, который позволяет анализировать работу программы во время её выполнения. С его помо- щью можно последовательно выполнить отдельные операторы исходного текста по шагам.
Впоследнее время в программировании наметился так называемый визуальный под- ход. Этот процесс автоматизирован в средах быстрого проектирования (Rapid Application Development, RAD – среды). Все необходимые элементы оформления и управления создают- ся и обслуживаются не путём ручного программирования, а с помощью готовых визуальных компонентов, которые мышью перетаскиваются в проектируемое окно. Их свойства затем настраиваются с помощью простых редакторов. При этом исходный текст программы гене- рируется RAD – средой автоматически, что позволяет сосредоточиться только на логике ре- шаемой задачи. Подобный подход называется визуальным программированием.
Из универсальных языков программирования сегодня наиболее популярны следую-
щие:
∙Бейсик (Basic);
∙Паскаль (Pascal);
∙Си++, Ява.
Для каждого их этих языков программирования сегодня имеются немало систем про- граммирования, выпускаемых различными фирмами.
6.4.2. Уровни и история развития языков программирования. Разные типы про-
цессоров имеют разные наборы команд, например, Pentium II – около тысячи команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его осо-
бенности, то он называется языком программирования низкого уровня.
Языком самого низкого уровня является язык ассемблера, который при программиро- вании представляет каждую команду машинного кода в виде символьных условных обозна- чений, так называемых мнемоник. С помощью языков низкого уровня создаются очень эф- фективные и компактные программы. С другой стороны, чтобы писать, например, на ассемб-
245
лере, нужно очень хорошо понимать устройство компьютера. На этих языках пишутся сис- темные библиотеки, драйверы, небольшие системные приложения.
Языки программирования, имитирующие естественные языки, обладающие укруп- нёнными командами, ориентированные на решение прикладных содержательных задач, на-
зываются языками высокого уровня (ЯВУ).
Языки высокого уровня значительно ближе и понятнее человеку, нежели компьютеру. Программы на уровне текстов легко переносятся на другие платформы. Писать сами про- граммы на этих языках значительно легче. Языки высокого уровня имеют алфавит, словар- ный запас, свои грамматику и синтаксис, а также семантику.
Алфавит – фиксированный набор основных символов, допускаемых для составления текста программы.
Синтаксис – система правил, определяющих допустимые конструкции языка из букв алфавита.
Семантика – система правил толкования отдельных языковых конструкций.
Понятие языка – некоторая синтаксическая конструкция языка и определяемые ею свойства программных объектов.
Языки высокого уровня обладают следующими достоинствами:
∙их алфавит значительно шире машинного, что повышает выразительность, на- глядность и понятность текста;
∙набор допустимых операций не зависит от набора машинных и выбирается из соображений удобства пользователя;
∙конструкции команд задаются в удобном для человека виде;
∙используется аппарат переменных и широкий набор типов данных. Насчитывается пять поколений языков программирования:
∙первое поколение – язык ассемблер, созданный в начале 50-х годов XX века (первый вариант);
∙второе поколение появилось в конце 50-х – начале 60-х годов. Это был симво- лический ассемблер – первый полноценный язык программирования;
∙третье поколение – универсальные языки высокого уровня. Простота и незави- симость от конкретного компьютера позволили резко повысить производи- тельность труда программистов. Подавляющее большинство языков этого по- коления успешно применяется и сегодня;
∙с начала 70-х годов XX – века и по настоящее время продолжается период язы- ков четвёртого поколения. Они ориентированы на специализированные облас- ти применения;
∙наконец, в середине 90-х годов появились языки пятого поколения. Это систе-
мы автоматического создания прикладных программ с помощью визуальных
средств разработки.
Ещё в 20-х годах XIX столетия Ч. Бэббидж высказал мысль о предварительной записи порядка действий машины для последующей автоматической реализации вычислений – про- грамме. Бэббидж предложил использовать запись программы на перфокартах, которые в ту пору уже применялись для управления ткацкими станками. Современница Бэббиджа Ада Ловлейс теоретически разработала некоторые приёмы управления последовательностью вы- числений и описала одну из важнейших конструкций любого современного языка програм- мирования – цикл.
Революционным моментом в истории языков программирования стало появление системы кодирования машинных команд с помощью специальных символов, предложенной Джоном Моучли. Эта система называлась Short Code и являлась примитивным языком про- граммирования высокого уровня. В ней программист описывал решаемую задачу в виде ма- тематических формул, а затем, используя специальную таблицу, переводил символ за симво- лом в специальные двухлитерные коды, которые отдельная специальная программа перево-
246
дила в машинный код. Эта система была по существу одним из первых примитивных интер- претаторов.
В 1951 г. Грейс Хоппер создала первый в мире компилятор и ввела сам этот термин. Компилятор Хоппер осуществлял функцию объединения команд, производил организацию подпрограмм, выделял память под программы, преобразовывал команды высокого уровня в машинные команды.
Середина 50-х годов XX столетия характеризуется стремительным прогрессом в об- ласти программирования. Первым языком был ФОРТРАН (FORmula TRANslator – перево- дчик формул), разработанный группой программистов фирмы IBM в 1954 г. В конце 50-х го- дов появился ALGOL (ALGOrithmic Language – алгоритмический язык). Алгол предназначен для записи алгоритмов, которые строятся виде последовательностей процедур. В нашей стране под руководством академика А.П. Ершова была создана удачная русифицированная версия Алгола – транслятор Альфа.
В середине 60-х Томас Курц и Джон Кемени создали специализированный язык программирования, который состоял из простых слов английского языка. Новый язык назва-
ли BASIC (Beginners All-Purpose Symbolic Instruction Code), он получил широкое распро-
странение среди пользователей ЭВМ различных категорий во всём мире.
К началу 70-х годов XX века число различных языков высокого уровня достигло трёх тысяч. Подавляющее большинство из них не получила сколько-нибудь широкого распро- странения. В 60-е годы были предприняты попытки преодолеть эту “разноголосицу” путём создания универсального языка программирования. Первым языком этого направления стал
PL/1 (Program Language One), созданный в 1967 г., затем Алгол-68 (1968 г.). Однако ни одна из таких попыток до сих пор не увенчалась успехом.
Языки программирования служат разным целям, и их выбор определяется удобством для пользователя, пригодностью для данного компьютера и данной задачи. Многообразие используемых языков программирования определяет разнотипность решаемых задач.
Развитие идеи Алгола о структуризации разработки алгоритмов нашло развитие при создании в начале 70-х годов XX века языка Паскаль Н. Виртом как учебного языка. В
настоящее время он является одним из основных языков обучению программированию в школах и вузах. Однако качества Паскаля оказались столь высоки, что им пользуются про- фессиональные программисты.
Языки
программирования
|
Процедурные |
|
|
Объектно- |
|
|
|
Декларативные |
|
||||||
|
|
|
ориентированные |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
Операцион- |
|
Струк- |
|
Объект- |
|
Визуаль- |
|
|
Функцио- |
|
Логичес- |
||||
ные |
|
турные |
|
|
ные |
|
ные |
|
|
нальные |
|
кие |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Рис. 6.3. Классификация языков программирования
В январе 1975 г. Пентагон решил навести порядок в хаосе трансляторов и учредил комитет, которому было поручено разработать один универсальный язык. В мае 1979 г. был
Грейс Мюррей Хоппер (1906 - 1992) – американский математик и программист, впоследствии контр-адмирал ВМС США.
Андрей Петрович. Ершов (1931 - 1988) – советский математик, создатель транслятора Альфа.
Томас Курц (р. 1928) – английский математик, создатель языка Basic.
Джон Георг Кемени (19261992) – английский математик, создатель языка Basic.
Никлаус Вирт (р. 1934) – швейцарский математик, создатель языка Pascal.
247
объявлен победитель – группа учёных во главе с Жаном Ихбиа . Они создали язык Ада – прямой наследник языка Паскаль.
Современное состояние языков программирования можно представить в виде сле- дующей схемы (рис. 6.3).
6.4.3. Примеры языков программирования.
1.Фортран (Fortran). Создан Джоном Бэкусом в 50-е годы XX века. В Фортране впервые был реализован ряд важнейших понятий программирования. Было создано огромное количество библиотек. Сейчас имеется стандартная версия Фортрана (HPF – High Performance Fortran).
2.Кобол (Cobol). Это компилируемый язык для экономистов, разработан в 60-е годы. На этом языке создано очень много приложений, он активно эксплуати- руется и сегодня.
3.Алгол (Algol). Создан в 60-е годы на замену Фортрану. Является более слож- ным. Нацелен на обслуживание научных приложений.
4.Паскаль (Pascal). Создан в 70-х годах Н. Виртом, во многом напоминает Алгол,
но в этом языке имеются возможности его применения при создании очень крупных проектов.
5.Бейсик (Basic) по популярности занимает первое место. Создан в 60-е годы в качестве учебного языка.
6.Си (С). Создан в лаборатории Bell и планировался для замены ассемблера, во многом похож на Паскаль и имеет средства для прямой работы с памятью. На
нём написана операционная система Unix. C++ - расширение Си, создано Бьярном Страуструпом в начале 80-х годов.
7.Ява (Java). Создан компанией Sun начале 90-х годов на основе С++ путём ис- ключения из последнего всех низкоуровневых возможностей. Занимает по по- пулярности второе место в мире после Бейсика. Java интерпретируемый язык, поэтому программы, написанные на нём, обладают невысоким быстродействи- ем.
8.ПЛ/1 (PL/1). Изобретён в середине 60-х годов компанией IBM. В этом языке было реализовано множество уникальных решений. По своим возможностям PL/1 значительно мощнее многих других языков, например, Си, Паскаля. Этот язык и сегодня продолжает поддерживаться компанией IBM.
9.Смолток (Smalltalk). Создан в 70-80-е годы компанией Xerox. Данный язык оригинален тем, что его синтаксис очень компактен и базируется исключи- тельно на понятии объекта.
10.Лисп (Lisp). Изобретён в начале 60-х годов Джоном Маккарти . Ориентиро- ван на структуру данных в форме списка и позволяет организовать эффектив- ную обработку больших объёмов текстовой информации.
11.Пролог (Prolog). Создан в начале 70-х годов Аланом Калмероэ . В его осно-
ву положена математическая модель теории исчисления предикатов и правил вывода этой теории.
12.Ада (Ada). Разработан группой под руководством Жана Ихбиа. Структура язы- ка похожа на Паскаль. В нём имеются средства строгого разграничения досту-
па к различным уровням спецификаций и доведена до предела мощность управленческих конструкций.
Жан Ихбиа (1940 - 2007) – французский математик и программист.Джон Бэкус (1924 – 2007) – американский математик.
Бьярн Страуструп (р. 1950) – датский математик и программист.
Джон Маккарти (р. 1927) – американский математик, создатель языка Lisp.
Алан Калмероэ (р. 1941) – французский математик.
248