- •552800 И 654600 - Информатика и вычислительная техника
- •Введение
- •Часть 1. Информатика и современное общество
- •1. Информатизация общества и информатика
- •1.1. Информационное общество
- •1.2. Понятие информатики
- •Средства для преобразования информации
- •Часть 2. Информация, ее представление и измерение
- •2. Информация
- •2.1. Понятие и характерные черты информации
- •2.2. Классификация информации
- •2.3. Свойства информации
- •3. Сигнал как материальный носитель информации
- •3.1. Виды сигнала
- •3.2. Преобразования сигнала
- •3.3. Системы счисления
- •3.3.1. Правила перевода чисел из одной системы счисления в другую
- •3.3.1.1. Правила перевода целых чисел
- •3.3.1.2. Правила перевода правильных дробей
- •3.3.1.3. Правило перевода дробных чисел
- •3.3.2. Правила выполнения простейших арифметических действий
- •3.3.2.1. Правила сложения
- •3.3.2.2. Правила вычитания
- •3.3.2.3. Правила умножения
- •3.3.2.4. Правила деления
- •4. Кодирование дискретного сигнала
- •4.1. Кодирование по образцу
- •4.1.1. Прямые коды
- •4.1.2. Ascii-коды
- •4.1.3. Коды, учитывающие частоту информационных элементов
- •4.1.4. Коды Грея
- •4.1.5. Код Штибица
- •4.2. Криптографическое кодирование
- •4.2.1. Метод простой подстановки
- •4.2.2. Метод Вижинера
- •4.3. Эффективное кодирование
- •4.3.1. Метод Шеннона-Фано
- •4.3.2. Метод Хаффмена
- •4.3.3. Повышение эффективности кодирования
- •4.3.4. Декодирование эффективных кодов
- •4.3.5. Специальные методы эффективного кодирования
- •4.3.5.1. Методы эффективного кодирования числовых последовательностей
- •4.3.5.2. Методы эффективного кодирования словарей
- •Основной вспомогательный
- •4.3.5.3. Методы эффективного кодирования естественно-языковых текстов
- •4.4. Помехозащитное кодирование
- •4.4.1. Искажение кодовых комбинаций
- •4.4.2. Кодовое расстояние и корректирующая способность кода
- •4.4.3. Коды, исправляющие ошибки
- •5. Измерение информации
- •5.1. Структурный подход к измерению информации
- •5.1.1. Геометрическая мера
- •5.1.2. Комбинаторная мера
- •5.1.3. Аддитивная мера
- •5.2. Статистический подход к измерению информации
- •5.3. Взаимосвязь структурного и статистического подходов к измерению информации
- •5.4. Семантический подход к измерению информации
- •5.4.1. Целесообразность информации
- •5.4.2. Полезность информации
- •5.4.3. Истинность информации
- •6. Качество информации
- •Часть 3. Компьютер как основной элемент информационного процесса
- •7. Структура компьютера и принципы его функционирования
- •8. Виды современных компьютеров
- •9. Структурные элементы компьютера
- •9.1. Память
- •9.1.1. Внутренняя память
- •9.1.2. Внешняя память
- •9.1.2.1. Физическая и логическая структура магнитных дисков
- •9.2. Устройство управления
- •9.3. Арифметико-логическое устройство
- •9.3.1. Структура и принцип действия
- •9.3.2. Формы представления числовых данных
- •9.3.2.1. Формы представления целых чисел
- •9.3.2.2. Формы представления вещественных чисел
- •9.3.3. Коды представления числовых данных
- •9.3.4. Принципы выполнения арифметической операции сложения
- •9.3.4.1. Сложение целых чисел
- •9.3.4.2. Сложение вещественных чисел
- •10. Виды программного обеспечения компьютера
- •Инструментарий технологии программирования.
- •10.1. Системное программное обеспечение
- •Системное по базовое по сервисное по (утилиты) операционные системы операционные оболочки
- •10.2. Пакеты прикладных программ
- •10.3. Инструментарий технологии программирования
- •Инструментарий технологии программирования
- •11. Поколения эвм
- •12. Технология проектирования программ
- •12.1. Формализация задачи
- •12.2. Программирование задачи
- •12.2.1. Разработка алгоритма
- •12.2.1.1. Способы описания алгоритма
- •12.2.1.2. Методы проектирования алгоритмов
- •12.3. Отладка программы
- •13. Эволюция использования компьютеров. Проект эвм пятого поколения
- •Часть 4. Фазы обращения информации
- •14. Структура информационного процесса
- •15. Сбор информации
- •15.1. Методы классификации
- •15.1.1. Иерархическая классификация
- •15.1.2. Фасетная классификация
- •15.2. Методы кодирования
- •15.3. Распознавание и кодирование объектов
- •15.4. Регистрация информации
- •16. Восприятие информации
- •16.1. Сканер как устройство восприятия информации
- •16.1.1. Первичное восприятие и измерение информации
- •16.1.2. Анализ результатов первичного восприятия и измерения
- •16.1.3. Распознавание символов
- •16.2. Восприятие информации клавиатурой
- •16.2.1. Первичное восприятие и измерение
- •16.2.2. Анализ
- •16.2.3. Распознавание
- •17. Передача информации
- •17.1. Модуляция и демодуляция сигнала
- •17.2. Уплотнение сигнала и выделение уплотненного сигнала
- •17.4. Компьютерные сети
- •17.4.1. Топология сетей
- •17.4.2. Методы передачи данных в сетях
- •17.4.3. Организация обмена информацией в сети
- •18. Обработка информации
- •19. Представление информации
- •19.1. Устройства вывода на электронный носитель
- •19.1.1. Мониторы, использующие элт
- •19.1.2. Жидкокристаллические мониторы
- •19.1.3. Плазменные мониторы
- •19.1.4. Технология вывода изображений на мониторы, использующие элт
- •19.1.4.1. Принципы организации текстовых видеорежимов
- •19.1.4.2. Принципы организации графических видеорежимов
- •19.2. Устройства вывода на бумажный носитель
- •19.2.1. Технология формирования цвета
- •19.2.2. Матричные принтеры
- •19.2.3. Струйная технология
- •19.2.4. Термическая технология
- •19.2.5. Электрографическая технология
- •Приложение 1. Определения информатики
- •Приложение 2. Определения информации
- •Приложение 3. Положения комбинаторики, используемые в измерении информации
- •Список литературы
- •Оглавление
- •Часть 1. Информатика и современное общество 6
- •Часть 2. Информация, ее представление и измерение 11
- •Часть 3. Компьютер как основной элемент информационного процесса 81
- •Часть 4. Фазы обращения информации 154
12.2.1.2. Методы проектирования алгоритмов
Методы проектирования алгоритмов включают: нисходящее проектирование, модульность, структурное программирование.
Нисходящее проектирование предполагает последовательное разбиение исходной задачи на подзадачи до такой конкретизации, когда подзадача сможет быть реализована одним оператором выбранного для программирования языка. По ходу нисходящего проектирования та или иная подзадача может сформировать самостоятельный модуль. Тогда может быть применен принцип модульного программирования. Он обеспечивает легкость составления алгоритмов и отладки программ, легкость сопровождения и модификации, а также возможность одновременной разработки различных модулей разными специалистами с использованием разных языков программирования.
При работе над модулем можно применить принцип структурного программирования. Его цель – повышение читабельности и ясности алгоритма (и программы), более высокой производительности программистов и упрощение отладки. В соответствии с этим принципом для построения любого алгоритма (программы) требуются три типовых блока:
-
функциональный. Используется для представления линейных алгоритмов. Описывается языком графических символов следующим образом:
-
циклический. Используется для представления циклических алгоритмов. Описывается языком графических символов одним из двух способов:
-
конструкция принятия двоичного решения. Применяется для представления разветвляющихся алгоритмов. Описывается языком графических символов следующим образом:
Пример 12.3. Разработать блок-схему для задачи из примера 12.1, используя принципы нисходящего проектирования, модульности и структурного программирования.
Выделим в поставленной задаче три основных подзадачи и введем необходимые комментарии:
-
ввод и размещение в памяти компьютера списка абитуриентов и их оценок по аттестату. При этом количество абитуриентов заранее неизвестно, поскольку документы принимаются у всех желающих;
-
ввод и анализ оценок по каждому экзамену по каждому абитуриенту. В результате анализа возможно исключение абитуриента из списка. Число абитуриентов известно после решения первой подзадачи. Количество экзаменов известно заранее;
-
упорядочение списка абитуриентов в зависимости от оценок. Здесь возможно использовать не сами оценки, а средний балл по аттестату и средний балл за вступительные экзамены;
-
определение нужного подмножества абитуриентов для зачисления. Число студентов набора известно заранее.
В соответствии с выделенными подзадачами определим четыре модуля, взаимосвязь которых представлена на рис. 12.2
Рис. 12.2. Укрупненная блок-схема для примера 12.1
После такой декомпозиции исходной задачи, полученные укрупненные блоки являются модулями, которые могут быть реализованы независимо друг от друга. Единственным ограничением при реализации является необходимость согласования межмодульных связей, когда результат работы одного модуля служит входной информацией другого. Такими данными являются:
-
от блока Ввод и размещение в блок Ввод и анализ передаются следующие данные: список абитуриентов (фамилии и инициалы), средний балл по аттестату, количество абитуриентов;
-
от блока Ввод и анализ блоку Упорядочение передаются: список абитуриентов, средний балл по аттестату и средний балл за вступительные экзамены;
-
от блока Упорядочение блоку Определение передается список абитуриентов и число тех, кто сдал вступительные экзамены.
После этих соглашений введем обозначения для требуемых переменных, придерживаясь принципа мнемоничности имен переменных, а также определим их тип:
-
фамилия и инициалы студента – FIO, тип - символьный;
-
начальное число абитуриентов – CHISLO, тип – целый;
-
число отчисленных абитуриентов – OTCHISL, тип – целый;
-
оценки по аттестату – ATTECTAT_OCENKI, тип – числовой одномерный массив;
-
оценки за вступительные экзамены – BCTUPIT_OCENKI, тип – числовой одномерный массив;
-
средний балл по аттестату – SR_ATTECTAT, тип - вещественная переменная;
-
средний балл по вступительным экзаменам – SR_BCTUPIT, тип - вещественная переменная;
-
число вступительных экзаменов – EXAMINE, тип - целая переменная;
-
объем набора – NABOR, тип - целая переменная.
Разработаем алгоритмы для выделенных четырех модулей и представим их графическими символами, т.е. блок-схемами. Результат показан на рис. 12.3 – 12.6.
Рассмотрим подробнее эти блок-схемы.
1. Модуль Ввод и размещение. В блоке 1 переменной CHISLO присваивается начальное нулевое значение – выполняется ее подготовка к накоплению числа абитуриентов,
1 2 3
Здесь вводятся FIO, ATTECTAT_OCENKI
ДА Для определения конца ввода вместо фамилии вводится условный знак
4 5 6
Расчет выполняется как определение
среднего арифметического всех оценок
в аттестате
В список помещаются FIO,
SR_ATTECTAT
Накопление числа абитуриентов
Рис. 12.3. Блок-схема модуля Ввод и размещение
1 2 3 4 5 6 7 8 9
Здесь вводится переменная EXAMINE
10
11
Здесь вводится BCTUPIT_ OCENKI(i)
НЕТ
ДА
Рис. 12.4. Блок-схема для модуля Ввод и анализ
1 2 3 4 5 6
Здесь выполня-
ется анализ НЕТ
SR_BCTUPIT(j-1)
< SR_BCTUPIT(j)
ДА Здесь выполняется
анализ ДА
SR_BCTUPIT(j-1)
= SR_BCTUPIT(j)
НЕТ
Здесь выполняется
анализ SR_ATTECTAT(j-1) НЕТ
< SR_ATTECTAT(j)
7
Рис.12.5. Блок-схема для модуля Упорядочение
1 2 3 4 5
НЕТ
ДА
Рис. 12.6. Блок-схема модуля Определение
которое осуществляется в цикле в блоке 6. В блоке 2 вводятся исходные данные по одному абитуриенту – его фамилия, имя, отчество, список оценок по аттестату. Данные заносятся в соответствующие переменные (см. комментарий к блоку). Для прерывания цикла задаются специальным знаком, ввод которого свидетельствует об окончании ввода списка абитуриентов. Этот анализ выполняется в блоке 3. Если достигнут конец списка абитуриентов (выход ДА), алгоритм прекращает свою работу. Если конец цикла не достигнут (выход НЕТ), рассчитывается среднее арифметическое значение оценок в аттестате (блок 4). Затем фамилия, имя, отчество и средний балл по аттестату запоминаются на диске (блок 5).
2. Модуль Ввод и анализ. В блоке 1 вводится число вступительных экзаменов. В блоке 2 формируется начальное (равное нулю) значение числа отчисленных абитуриентов: эта переменная нужна для определения реального числа абитуриентов, сдавших экзамены и допущенных к зачислению. В блоке 3 организуется циклический процесс, позволяющий по каждому вступительному экзамену выполнить ввод соответствующих оценок по каждому абитуриенту. Обращение ко всем абитуриентам организуется с помощью блока 4. Если введенная оценка равна 2, абитуриент исключается из списка, размещенного на диске (блок 7). В противном случае оценка добавляется к списку оценок абитуриента (блок 9). Внутри цикла формируется также число отчисленных абитуриентов (блок 8). Таким образом, данный алгоритм является примером вложенной циклической структуры, когда один циклический процесс вложен в другой. По окончании цикла определяется число оставшихся абитуриентов (блок 10) и рассчитывается средний балл за вступительные экзамены по каждому абитуриенту (блок 11). Результат последнего расчета помещается в список абитуриентов на диск.
3. Модуль Упорядочение. В этом модуле реализован один из методов упорядочения списка по убыванию значений элементов (в нашем случае по убыванию средних баллов по вступительным экзаменам и по аттестату). Идея метода состоит в том, что последовательно, начиная с первого элемента списка, сравниваются два рядом стоящих элемента. Если последующий элемент больше предыдущего, они меняются местами. Таким образом, если в списке n элементов, указанное сравнение выполняется (n-1) раз по количеству различных пар. Чтобы учесть соотношение не только рядом стоящих, но и разнесенных по списку элементов, описанный анализ пар элементов выполняется (n-1) раз. Иначе говоря, этот метод представляется вложенным циклическим алгоритмом (блоки 1 и 2). В блоке 3 сравниваются два рядом стоящих элемента в списке своими средними оценками за вступительные экзамены: если последующий элемент (абитуриент) имеет средний балл больше, чем предыдущий элемент, выполняется блок 4 и элементы меняются местами; иначе выполняется блок 5. В этом случае определяется, равны ли средние баллы за вступительные экзамены у рядом стоящих элементов в списке. Если это так (выход ДА из блока 5), в расчет берутся средние баллы за аттестат (блок 6): преимущества имеет тот абитуриент, у которого больше средний балл по аттестату при равных оценках на вступительных экзаменах. Если же окажется, что средний балл за вступительные экзамены у последующего элемента списка меньше, чем у предыдущего (выход НЕТ у блока 5), элементы местами не меняются – они и так упорядочены по убыванию среднего балла за вступительные экзамены. В блоке 6 анализируются средние баллы за аттестат. Этот анализ выполняется только тогда, когда средние оценки по вступительным экзаменам одинаковые у рядом стоящих в списке абитуриентов. Если средний балл по аттестату у последующего элемента больше, чем у предыдущего (выход ДА блока 6), элементы меняются в списке местами (блок 7). Иначе (выход НЕТ у блока 6) никаких преобразований в списке не происходит.
4. Модуль Определение. В блоке 1 вводится значение набора студентов. В блоке 2 определяется, превышает ли требуемый набор количество абитуриентов, допущенных к зачислению. Если вступительные экзамены успешно сдало меньшее количество абитуриентов, чем требуется (выход ДА из блока 2), то значение набора уменьшается до этой величины (блок 3). Иначе (выход НЕТ из блока 2) управление передается блоку 4, в котором организуется циклический алгоритм просмотра списка абитуриентов и вывод данных по каждому абитуриенту (блок 5). На этом работа алгоритма заканчивается: сформирован список абитуриентов, которые могут быть зачислены по результатам вступительных экзаменов.
Анализ блок-схем показывает:
-
при проектировании алгоритма использован принцип нисходящего проектирования, в соответствии с которым исходная задача декомпозирована на подзадачи (см. рис. 12.2);
-
выделенные подзадачи реализованы как отдельные модули (см. рис. 12.3 – 12.6), т.е. применен принцип модульности;
-
в структуре модулей можно выделить типовые конструкции, которые указывались ранее, т.е. алгоритмы выполнены с учетом принципов структурного программирования;
-
каждый блок из блок-схем рис. 12.3 – 12.6 может быть закодирован одним оператором такого операторного языка, как, например, Турбо-Паскаль. Это означает, что блок-схемы разработаны с учетом требуемой степени детализации, а сама кодировка блок-схем может быть выполнена читателем самостоятельно.
Таким образом, разработка алгоритма и его кодирование есть не что иное, как представление исходной задачи (в нашем случае это задача из примера 12.1) и способов ее решения средствами, понятными компьютеру.