- •1.1. Понятие информации
- •1.2. Методы получения информации
- •1.3. Свойства информации
- •1.4. Измерение информации
- •1.5. Передача информации. Информационные каналы
- •1.6. Характеристики информационного канала
- •1.7. Использование информации
- •1.8. Обработка информации
- •1.9. Формы представления информации
- •1.10. Способы представления чисел в компьютере
- •1.11. Кодировка символов
- •2. Технические и программные средства реализации информационных процессов. Структурная организация и принципы функционирования персональных компьютеров (пк)
- •2.1. Основные типы компьютеров. Конфигурации персональных компьютеров (пк)
- •2.2. Основные принципы функционирования пк
- •2.3. Состав типового компьютера
- •2.4. Устройства обработки
- •2.5. Устройства хранения
- •2.6. Устройства вывода
- •2.7. Устройства ввода
- •3.Основные понятия и принципы моделирования
- •3.1. Понятие модели и моделирования
- •3.2. Назначение моделей
- •3.3. Основные этапы построения моделей
- •3.4. Классификация моделей
- •3.5. Понятие формализации
- •3.6. Этапы решения задач на компьютере
- •3.7. Методы разработки алгоритмов и программ
- •3.8. Основы алгоритмизации
- •3.9. Способы представления алгоритмов
- •Блок-схемы алгоритмов и программ
- •3.10. Типы алгоритмов
- •3.11. Классификация языков программирования
- •3.12. Основы объектно-ориентированного программирования
- •3.13. Системы программирования
- •4. Структура программного обеспечения пк
- •5. Методы защиты информации
- •5.1. Компьютерные вирусы
- •5.2. Методы защиты от компьютерных вирусов
- •5.3. Программы борьбы с компьютерными вирусами
- •5.4. Защита от несанкционированного доступа к информации
- •5.5. Использование криптографии
- •5.6. Реализация алгоритмов шифрования
- •5.7. Понятие государственной и коммерческой тайны
3.10. Типы алгоритмов
Различают три основные структуры в построении алгоритмов: линейная, разветвленная и циклическая. Все реальные алгоритмы строятся на основе сочетания этих основных типов.
АЛГОРИТМ ЛИНЕЙНОЙ СТРУКТУРЫ
Алгоритм линейной структуры состоит из последовательности действий, формирующих одну ветвь вычислений. Примером линейного алгоритма может быть алгоритм расчета Y по формуле Y = X2 (рис. 1).
РАЗВЕТВЛЯЮЩИЙСЯ АЛГОРИТМ
Решение задач не всегда можно представить в виде линейного алгоритма. Существуют задачи, в которых требуется организовать выбор выполнения последовательности действий в зависимости от каких-либо условий. Такие алгоритмы называются алгоритмами разветвляющейся структуры. В них должен присутствовать один или несколько логических операторов (проверки условия) и несколько ветвей решения. Примером разветвляющегося алгоритма может быть выбор наибольшего из двух введенных произвольных чисел (рис. 2).
Ц
ИКЛИЧЕСКИЙ
АЛГОРИТМ
Алгоритмы, отдельные действия в которых многократно повторяются, называются алгоритмами циклической структуры. Совокупность повторяющихся действий алгоритма принято называть циклом. При разработке циклического алгоритма вводят следующие понятия: параметр цикла — величина, с изменением значения которой связано многократное выполнение цикла; начальное и конечное значение параметров цикла; шаг цикла — значение, на которое изменяется параметр цикла при каждом повторении.
Цикл организуют по определенным правилам. Циклический алгоритм состоит из подготовки цикла; тела цикла; условия продолжения цикла.
В подготовку цикла входят действия, связанные с заданием исходных данных для параметров цикла и других величин, использующихся в цикле.
В тело цикла входят многократно повторяющиеся действия для вычисления искомых величин; подготовка следующего значения параметра цикла, подготовка других значений, необходимых для повторного выполнения действий в теле цикла.
В условии продолжения цикла определяется необходимость дальнейшего выполнения повторяющихся действий (тела цикла). Если параметр цикла превысил конечное значение, то выполнение цикла должно быть прекращено. Примером циклического алгоритма является алгоритм определения суммы десяти произвольных чисел, вводимых пользователем (рис. 3).
АЛГОРИТМЫ СЛОЖНОЙ СТРУКТУРЫ
В рассмотренных ранее алгоритмах решения задач можно выделить части, которые являются типичными для многих алгоритмов. Ниже приведен перечень часто употребляемых сочетаний блоков в алгоритмах, называемых основными управляющими структурами. С их помощью можно построить алгоритмы любой сложности.
3.11. Классификация языков программирования
Программа — один из способов записи алгоритма, записанный по правилам какого-либо языка программирования.
Традиционно под программой понимают последовательность операторов (команд, выполняемых компьютером). Этот стиль программирования принято называть императивным. Программируя в императивном стиле, программист должен объяснить компьютеру, как нужно решать задачу.
Противоположный ему стиль программирования — декларативный, в котором программа представляет собой совокупность утверждений, описывающих фрагмент предметной области или сложившуюся ситуацию. Программируя в декларативном стиле, программист должен описать, что нужно решать.
Соответственно и языки программирования можно поделить на императивные и декларативные.
Императивные языки основаны на фон неймановской модели вычислений компьютера. Решая задачу, императивный программист вначале создает модель в некоторой формальной системе, а затем переписывает решение на императивный язык программирования в терминах компьютера. В связи с этим очень часто императивные программисты даже разделяют работу в соответствии с двумя описанными выше этапами. Одни люди, постановщики задач, придумывают решение задачи, а другие переводят это решение на язык программирования.
В основе декларативных языков лежит формализованная человеческая логика. Человек лишь описывает решаемую задачу, а поиском решения занимается система программирования. В итоге получается большая скорость разработки приложений, значительно меньший размер исходного кода, легкость записи знаний на декларативных языках, более понятные, по сравнению с императивными языками, программы.
Известна классификация языков программирования по их близости либо к машинному языку, либо к естественному человеческому языку. Те, что ближе к компьютеру, относят к языкам низкого уровня, а те, что ближе к человеку, называют языками высокого уровня.
Машинно-ориентированные языки программирования включают в себя собственно машинные коды и язык Ассемблер. Каждая команда на языке Ассемблера представляет одну машинную команду. Этот язык очень эффективен, так как приближен к машинным кодам. Программирование на этом языке называется «программированием на низком уровне» и требует высокой квалификации программиста. Решение сложных прикладных задач на таких языках очень трудоемко. Чаще всего эти языки используются для написания операционных систем (ОС) и программ-оболочек для ОС.
Необходимо было сделать создание программ технологическим процессом. Для этого были разработаны языки программирования и специальные программы-трансляторы, предназначенные для перевода программы с языка программирования в машинный код.
Эта группа языков называется проблемно-ориентированными языками. Языки этой группы разрабатывались специально для программирования прикладных задач, имеющих сложный алгоритм решения. Условно их называют языками «высокого уровня». Каждой команде в языке высокого уровня соответствует несколько машинных команд. Текст программы, написанный на языке высокого уровня, называется исходным модулем. Язык высокого уровня «не понятен» машине, поэтому существуют специальные программы — трансляторы, переводящие операторы языка высокого уровня в машинные коды. Существуют два типа программ-трансляторов: компилятор и интерпретатор.
Интерпретатор работает с исходным модулем по шагам. При этом он разбирает (интерпретирует) каждый оператор исходного модуля и выполняет его. В режиме интерпретации проще отлаживать программу, однако программа работает значительно медленнее, чем скомпилированная программа. Кроме того, необходимо иметь копию интерпретатора в памяти все время, тогда как многие его возможности для исполнения конкретной программы не нужны.
Компилятор работает сразу со всем исходным модулем, переводя его на машинный язык и формируя на его основе загрузочный модуль, т.е. исполняемый файл, готовый для выполнения на компьютере. Далее программа в виде загрузочного модуля выполняется независимо от исходного модуля.
Машинно-ориентированные языки
Машинно-ориентированные языки — это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно-ориентированные языки позволяют использовать все возможности и особенности машинно-зависимых языков:
высокое качество создаваемых программ (компактность и скорость выполнения);
возможность использования конкретных аппаратных ресурсов;
предсказуемость объектного кода и заказов памяти;
для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;
трудоемкость процесса составления программ (особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;
низкая скорость программирования;
невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.
По степени автоматического программирования машинно-ориентированные языки подразделяются на классы:
машинный язык (МЯ) — командный язык. В команде сообщается информация о местонахождении операторов и типе выполняемой операции;
языки символического кодирования (ЯСК) — командные языки, в которых коды операций и адреса в машинных командах (в двоичных или восьмеричных цифрах) заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции;
автокоды — языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд, т.е. достаточно часто использующиеся командные последовательности, которые соответствуют определенным процедурам преобразования ин формации. Макрокоманды переводятся в машинные команды двумя путями — расстановкой и генерированием. В постановочной системе содержатся серии команд, реализующих обозначенную макрокомандой функцию. Макрокоманды обеспечивают передачу фактических параметров, которые в процессе трансляции вставляются в эти команды, превращая ее в реальную машинную программу. В системе с генерацией имеются специальные программы, анализирующие макрокоманду и определяющие, какую функцию необходимо выполнить;
ассемблеры — развитые автокоды, символическое представление машинного языка;
макрос — язык, являющийся средством для замены последовательности символов, описывающих выполнение требуемых действий, на более сжатую форму. Макрос предназначен для сокращения записи исходной программы. Компонент программного обеспечения, обеспечивающий функционирование макросов, называется макропроцессором. На макропроцессор поступает имя макроса и исходный текст. Реакция макропроцессора на вызов — выдача выходного текста. Макрос одинаково может работать как с программами, так и с данными.
Машинно-независимые языки — это средство описания алгоритмов решения задач и информации, подлежащей обработке. Они получили название высокоуровневых языков программирования. Программы, составляемые на таких языках, представляют собой последовательности операторов, структурированные согласно правилам рассматривания языка (задачи, сегменты, блоки и т.д.). Появились возможность не расписывать в деталях вычислительный процесс на уровне машинных команд, а сосредоточиться на основных особенностях алгоритма. Типы машинно-независимых языков рассмотрены ниже.
• Проблемно-ориентированные языки, ориентированные на решение определенных проблем, обеспечивают программиста средствами, позволяющими коротко и четко формулировать задачу и получать результаты в требуемой форме. К языкам этого типа относятся:
Фортран, Алгол — языки, созданные для решения математических задач;
Simula, Сленг — для моделирования;
Лисп, Снобол — для работы со списочными структурами.
• Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык Пл/1 был разработан фирмой IBM. Второй по мощности универсальный язык — Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными, организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнения участков программ.
Диалоговые языки — программные средства, обеспечивающие оперативное взаимодействие человека с компьютером. Необходимость обеспечения оперативного взаимодействия с пользователем потребовала сохранения в памяти копии исходной программы даже после получения объектной программы в машинных кодах. При внесении изменений в программу с использованием диалогового языка система программирования с помощью специальных таблиц устанавливает взаимосвязь структур исходной и объектной программ. Это позволяет осуществить требуемые редакционные изменения в объектной программе. Примерами диалоговых языков являются Бейсик, Си и др.
Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.
