- •Содержание
- •1 Передача информации
- •1.1 Общая схема передачи информации в линии связи
- •1.2 Характеристики канала связи
- •1.3 Влияние шумов на пропускную способность канала
- •1.4 Обеспечение надежности передачи информации
- •1.4.1 Коды, обнаруживающие ошибку
- •1.4.2 Коды, исправляющие одиночную ошибку
- •1.5 Способы передачи информации в компьютерных линиях связи
- •1.6 Связь компьютеров по телефонным линиям
- •2 Поколения эвм. Основные устройства компьютера
- •2.1 Поколения электронных вычислительных машин
- •2.2 Компьютер как формальный исполнитель алгоритмов (программ)
- •2.3 Основные устройства компьютера и их функции
- •3 Структура программного обеспечения компьютера
- •3.1 Классификация программного обеспечения
- •3 .2 Системное программное обеспечение эвм
- •3.3 Прикладное программное обеспечение эвм
- •4 Хранение информации в озу
- •4.1 Классификация данных
- •4.2 Представление элементарных данных в озу
- •4.3 Структуры данных и их представление в озу
- •5 Хранение информации на внешних запоминающих устройствах. Файловые структуры
- •5.1 Особенности устройств, используемых для хранения информации в компьютерах
- •5.2 Представление данных на внешних носителях
- •5.3 Роль операционной системы
- •6 Основы алгоритмизации
- •6.1 Понятие алгоритма. Свойства алгоритма
- •6.2 Символьная форма представления алгоритма
- •6.3 Графическая форма представления алгоритма
- •6.4 Структурная теорема
- •6.5 Основные подходы к разработке алгоритмов
- •6.6 Проверка правильности программы
- •7 Начальные сведения о вычислительных сетях
- •7.1 Классификация вычислительных сетей
- •7.2 Локальные вычислительные сети (лвс)
- •7.3 Организация обмена информацией в лвс
- •7.4 Методы доступа в лвс (управление правом отправки сообщения)
- •8 Глобальные вычислительные сети
- •8.1 Электронная почта
- •8.3 Всемирная паутина World Wide Web
- •8.4 Общие вопросы безопасности
- •Информатика
- •Гоу впо “Московский государственный университет приборостроения и информатики”
- •107996, Москва, ул. Стромынка, 20
6.5 Основные подходы к разработке алгоритмов
Конечно, когда тебе говорят сделать первый шаг и когда тебе говорят, как это сделать – это не одно и тоже. Нахождение такой точки опоры, также как и понимание того, как с ее помощью найти окончательное решение, требует от человека творческих способностей.
Отметим основные походы к разработке алгоритма.
1. Попытаться решить задачу в обратном порядке. Например, если нужно найти способ порождения определенных выходных данных при заданных входных, то можно попытаться начать решение с выходных данных и вернуться к заданным исходным данным.
(Алгоритм сложения фигурок из листа бумаги – взять сложенную птицу и последовательно развернуть ее, чтобы понять, как сложить?)
2. Найти связанную с исходной задачу, которую легче решить или решение которой уже найдено, а затем попытаться применить это решение к текущей задаче.
3. Применить пошаговую детализацию (нисходящий метод), не пытаясь решить всю задачу с множеством деталей сразу. Разбивая исходную задачу на подзадачи, мы решаем ее за несколько шагов, найти решение которых проще, чем решение всей задачи. Эти шаги могут также быть разбиты на меньшие и так до тех пор, пока вся задача не будет сведена к набору легко решаемых подзадач.
Сегодня это – один из основных подходов к разработке программного обеспечения, так как пошаговая детализация естественно адаптируется к модульному представлению. Пример такого подхода к разработке алгоритма приведен на рисунке 6.4.
Но отсюда не следует делать ошибочный вывод, что любой алгоритм может быть построен с помощью пошаговой детализации.
6.6 Проверка правильности программы
Рассмотрим решение следующей задачи.
У путешественника есть золотая цепь, состоящая из 7 колец. Он должен остановиться в гостинице на несколько дней (но не более 7). Плата за сутки равна 1 кольцу цепочки. Каково наименьшее число колец, на которые нужно разрезать цепь, чтобы платить за гостиницу по одному кольцу каждое утро, не платя за ночлег заранее?
Решение. Можно догадаться, что разрезать нужно не каждое кольцо цепочки. Если мы разрежем 2-ое кольцо, то освобождается и первое, и второе. Следовательно, нужно разрезать только 2, 4, 6 кольца.
У меньшение числа разрезанных колец приводит к тому, что какие-либо 2 кольца становятся соединенными. Поэтому правильный ответ – 3 кольца.
Действительно ли это правильное решение задачи?
Можно предложить такой вариант решения: Если разрезать только третье кольцо, то мы будем иметь 3 части цепочки, состоящей из 1, 2 и 4 колец. Дальше можно действовать следующим образом:
Первое утро: отдать 1 кольцо.
Второе утро: забрать кольцо и отдать 2.
Третье утро: отдать 1 кольцо.
Четвертое утро: забрать все кольца (1 + 2) и отдать 4 кольца.
Пятое утро: отдать 1 кольцо.
Шестое утро: забрать одно кольцо и отдать 2.
Седьмое утро: отдать 1 кольцо.
Следовательно, первый ответ, который считали правильным, таковым не является. Можно ли быть уверенным, что найденное решение правильное? Меньше 1 кольца нельзя разрезать, следовательно, новое решение минимально.
Этот пример подчеркивает различие между решением, которое считается правильным, и решением, которое действительно является таковым. Не всегда это – одно и тоже. Известно большое количество историй о ПО, которое считалось правильным, однако переставало работать в критических ситуациях из-за возникновения каких-либо условий.
Таким образом, проверка правильности программного обеспечения имеет большое значение, а поиск эффективных методов проверки является активно развивающейся областью ВТ.
Формальные методы проверки правильности программ не разработаны настолько хорошо, чтобы их можно было с легкостью применять к общим прикладным задачам.
В результате в настоящее время в большинстве случаев программное обеспечение проверяется посредством его тестирования при различных условиях, что очень ненадежно.
Проверка путем тестирования доказывает только то, что программа работает правильно в случае, предусмотренном тестированием. Любые дополнительные умозаключения – просто предположения.
Следовательно, ошибки в программе, так же как наша ошибка в решении задачи о цепочке, могут оставаться незамеченными.
Контрольные вопросы и задачи
1. Понятие алгоритма.
2. Перечислите основные свойства алгоритмов.
3. Почему естественный язык не может использоваться для представления алгоритмов для исполнителя «компьютер»?
4. Какие формы представления алгоритмов используются для исполнителя «человек»?
Задача 1. Постройте схему алгоритма и напишите его представление на псевдокоде для решения задачи: по координатам точки (x, y) определить номер координатной четверти, которой принадлежит точка.
Задача 2. Следующая программа вычисляет произведение двух неотрицательных целых чисел x и y, суммируя x раз число y (то есть 3*4 = 4+4+4). Является ли программа правильной?
А лг Mult (x, y);
произв := y; 0 4
Счетчик := 1; Произв. 4
Пока (счетчик < x) повторять Счетчик 1
(произв :=произв + y; Пока – не выполняется
счетчик := счетчик + 1) результат Произв. = 4,
Вывод произв.; а должен быть 0
Конец.