Как составлять программы?

Содержание |  Назад  |  Вперед

Как составлять программы?
Очень просто! На самом деле, процесс написания программы состоит в записи (кодировании) некоторого алгоритма с использованием тех или иных средств, предоставляемых вам языком программирования. Поэтому, для успешного составления программ, нужно хорошо знать две вещи: во-первых (и прежде всего) – алгоритм, и во-вторых – набор средств (механизмов), с помощью которых этот алгоритм можно реализовать на языке программирования.

Итак, прежде всего – алгоритм! Что такое алгоритм? – это конечная последовательность действий (предписаний), выполнение которых позволяет достичь заданной цели.

Алгоритм всегда составляется для конкретного исполнителя. Так, например, кулинарный рецепт приготовления какого-нибудь блюда, или инструкция по пользованию утюгом – это алгоритмы, ориентированные на человека. Инструкции типа:

  1. Задать А с клавиатуры;
  2. Пусть В равно 10;
  3. Сложить А и В; результат записать в С;
  4. Если С больше 100 то идти к п.8 иначе к следующему п.
  5. стоп

– типичный пример алгоритма, исполнителем которого может быть компьютер.

Алгоритмы, составленные для человека (алгоритмы бытовой сферы), всегда предполагают определенный уровень начальной подготовки исполнителя. Например, при описании рисунка вязки не нужно объяснять как держать спицы, как провязывать петлю или что такое лицевая и изнаночная вязка – предполагается, что эти знания уже есть у человека.

При составлении алгоритмов для компьютера, необходимо учитывать, что его уровень начальной подготовки близок к нулю! Это достаточно резкое утверждение может показаться на сегодняшний день несколько странным. На самом деле, мы уже привыкаем к тому, что компьютер способен воспринимать рукописный текст и даже человеческую речь, управлять работой сложных технических систем, сочинять стихи и музыку… и действительно, все это стало реальностью. Однако, СТОП! Произнося слова “компьютер способен”, нужно еще сказать, что способен только в том случае, если он работает под управлением составленной заранее программы! Именно программа, созданная человеком, повышает “интеллектуальный” уровень машины. А каков же начальный “уровень знаний” компьютера? Этот уровень определяется набором команд (инструкций), которые способен выполнить процессор. Это команды типа:

Системы команд современных процессоров насчитывают сотни подобных операций. Однако, среди них, Вы никогда не найдете такие команды, как, скажем, "ввести значение с клавиатуры", "вывести символ на экран" или, например,   “вычислить определенный интеграл”, “воспроизвести звуковой файл” и т.п. Все эти действия должны быть сведены (редуцированы) к набору более простых (элементарных) команд, которые доступны процессору.

Несмотря на крайне низкий интеллектуальный уровень, компьютер, тем не менее, обладает огромной электронной памятью, которая позволяет сохранять информацию в виде последовательности битов (двоичных цифр). Кроме этого, он способен феноменально быстро оперировать последовательностями электрических сигналов, представляющих некие числа. В сочетании с хорошими программами, написанными умными и талантливыми людьми, возможности компьютерной техники оказываются поистине безграничными.

На заре развития вычислительной техники программы создавались непосредственно в виде последовательности команд процессора, т.е. на машинном языке. Это была очень трудоемкая работа, требующая, к тому же, от программиста хороших знаний архитектуры компьютера. Вскоре, возникла идея создать систему условных обозначений для записи алгоритмов в форме, понятной для человека (т.е. алгоритмический язык программирования) и программу-транслятор, переводящую этот алгоритм на машинный язык. Использование алгоритмических языков существенно повышает “начальный уровень знаний” компьютера. Теперь доступны такие операции как:

При этом появляется возможность работать не только с числовой, но и с символьной информацией в явном виде.

Обратите внимание, что такие операции как, например, “найти корень нелинейного уравнения”, "найти минимум и максимум функции", "отсортировать массив чисел по возрастанию" и т.п. не присутствуют в рассмотренном выше списке. Они должны быть сведены к более простым арифметическим и логическим операциям.

Таким образом, набор элементарных действий, которые можно реализовать с помощью алгоритмического языка программирования и составляет тот “начальный уровень знаний”, на который можно опираться и учитывать при составлении алгоритмов.

Как составлять алгоритмы?
К сожалению, ответить на этот вопрос однозначно и сколько-нибудь полно, вообще, вряд ли возможно! Это все равно, что пытаться ответить на вопрос: как писать картины или, скажем, как сочинять стихи? Все дело в том, что процесс создания алгоритма и, в конечном итоге, программы – процесс творческий. Тем не менее, художник или поэт, помимо таланта, должен владеть некоторой общей техникой письма картин или сочинения стихов. Это также относится и к составлению алгоритмов.

Далее мы рассмотрим несколько примеров, которые позволят выявить общие принципы, согласно которым, строятся алгоритмы для компьютеров.

Пример 1. Составить алгоритм поиска максимального числа среди заданной последовательности N чисел.

– “А что тут придумывать – посмотрел и выбрал!” – можете воскликнуть Вы. Да, мы действительно можем посмотреть и выбрать, но компьютер этого сделать не может. А что может? Может складывать, вычитать, делить, умножать, сравнивать числа…

Обозначим заданные числа как а1, а2, …, аn. Введем дополнительные переменные: max – для максимального числа и i – порядковый номер элемента.

Опишем словесно возможную последовательность действий:

  1. Ввести числа: n, а1, а2, …, аn;
  2. Переменной max присвоить значение a1;
  3. Переменной i присвоить значение 2;
  4. Если ai>max, тогда переменной max присвоить значение ai;
  5. Увеличить значение переменной i на единицу;
  6. Если i>n, тогда вывести на экран max, иначе идти к п.4;

Этот же алгоритм можно представить более наглядно – в виде блок-схемы.

htp_bc1.gif (7640 bytes)

 

Пример 2. Составить алгоритм поиска корней квадратного уравнения.

ax2 + bx + c = 0

В основу алгоритма можно положить известные формулы:

Остается только предусмотреть исключительные ситуации, иначе составленный алгоритм не будет универсальным (не будет полностью описывать вычислительный процесс). Таких ситуаций три:

  1. а = 0, уравнение вырождается в линейное bx + c = 0 с корнем x = -c/b;
  2. a = 0 и b = 0, уравнение теряет смысл;
  3. (b2-4ac)<0 – уравнение имеет комплексные корни, вещественные и мнимые части которых, соответственно, равны:

,       

Ниже приведена блок-схема возможного алгоритма:

htp_bc2.gif (13459 bytes)

Выводы:

При составлении алгоритма -

  • можно использовать только такие инструкции, которые способен выполнить исполнитель (компьютер). Следовательно, необходимо хорошо знать возможности исполнителя и научиться сводить решение конкретной задачи к последовательности этих инструкций;
  • необходимо предусмотреть (продумать) все возможные варианты развития вычислительного или иного процесса, включая действия машины в случае некорректных исходных данных.

Возвращаясь к написанию программ.
После того, как алгоритм составлен (на бумаге или "в голове") его необходимо переложить на алгоритмический язык. Известно (и даже, доказано), что алгоритм любой сложности можно реализовать с помощью парочки операторов, например, условного оператора (IF) и оператора безусловного перехода (GOTO). Для примера реализуем алгоритм поиска максимального числа (для краткости разделы описания и процесс ввода элементов массива опущены):

BEGIN
  ... { ввод чисел n; a[1], a[2], ..., a[n] }
  max := a[1];
  i := 2;
  metka1:  if a[i]>max then max := a[i];
  i := i+1;
  if i>n then write(max) else goto metka1;
END.

Однако писать программы используя только два оператора совершенно не разумно и не эффективно. Тем более, что в большинстве алгоритмических языков есть и другие операторы, которые позволяют реализовать различные алгоритмы более компактно (с точки зрения текста программы) и более эффективно (с точки зрения ее выполнения). К таковым операторам, в частности, относятся операторы организации циклов и оператор множественного выбора. Перепишем, в качестве примера,  составленную выше программу с использованием оператора параметрического цикла FOR:

BEGIN
  ... { ввод чисел n; a[1], a[2], ..., a[n] }
  max := a[1];
  for i:=2 to n do if a[i]>max then max := a[i];
  write(max)
END.

Согласитесь, что она выглядит гораздо изящнее (и, к тому же,  короче).

Выводы:

При составлении программ -

  • не следует ограничивать себя только двумя операторами (IF и GOTO). Более того, следует избегать использования оператора GOTO;
  • использование различных операторов, специально предназначенных для реализации тех или иных типовых алгоритмов, позволяет сделать программу более компактной и лучше структурированной.

 

Содержание |  Назад  |  Вперед