1.1 Понятие алгоритма.
____________________________________________________________________
1.1.3 Вместо лирического отступления
Какие выводы можно сделать из анализа этой задачи с точки зрения разра-
ботки алгоритма или, как еще говорят, алгоритмизации данной задачи?
Во-первых, крайне редко и для очень простых задач удается сразу и без-
ошибочно записать алгоритм. В большинстве случаев приходится, как мы ви-
дели, начинать с самой общей и несколько "расплывчатой" формулировки ал-
горитма. В любом случае стоит даже этот алгоритм записать в виде блок схемы
(рис. 1.2). Потому что одно из несомненных достоинств записи алгоритма в ви-
де блок-схемы заключается в том, что это позволяет увидеть структуру алго-
ритма.
Постепенно мы детализировали алгоритм, с каждым шагом улучшая и со-
вершенствуя его. Кстати, метод, которым мы воспользовались, так и называется
метод пошаговой детализации.
Во-вторых, многие молодые, особенно начинающие, программисты часто вообще игнорируют этап составления алгоритма, и едва успев прочесть усло-
вие задачи, сразу садятся за компьютер и начинают писать программу. Встре-
чаются, конечно, сверходаренные люди, которые могут позволить себе это, и
то – не всегда. Но таких – единицы! Большинству "смертных" приходится по-
шагово разрабатывать алгоритмы и записывать их в том или ином виде.
В-третьих, автор многократно наблюдал такую картину – студент получает задание, записывает условие задачи себе в тетрадь и … застывает как сфинкс!
Проходит минут пять, десять, двадцать, … много проходит времени, а он даже не шелохнется, не в силах предложить что-нибудь путное! Потом, когда спра-
шиваешь у него – о чем ты думал в это время, ответы неопределенные, чаще всего типа "не знал с чего начать".
Помимо стандартного ответа – "если не знаешь с чего начать, начни с на-
чала", что еще можно посоветовать:
1. Еще более стандартно – больше читайте книг, скрупулезно разбирайте
26
Глава 1 Основы программирования
____________________________________________________________________
примеры, приведенные в них. "Горе тому, кто читает только одну книгу" (Джордж Герберт).
2. Одного чтения и "понимания" примеров в книгах недостаточно. Надо самостоятельно тренироваться в составлении алгоритмов для самых разных за-
дач. Если можно так выразиться – тренируйте "соображалку"! Лучший способ такой. Если вы видите в книге подробно разобранный пример, не спешите чи-
тать дальше. Попробуйте составить алгоритм самостоятельно! Это может от-
нять у вас довольно много времени. Не жалейте его! И только после полного завершения составления алгоритма можете свериться с книгой. На первых по-
рах у вас может ничего не получаться. Не отчаивайтесь, со временем придет умение и опыт.
3. Не стесняйтесь спрашивать, перенимайте опыт у других. В сети огром-
ное количество форумов по программированию. Зайдите в любой из них, по-
смотрите, какие вопросы там задаются и, опять, постарайтесь сначала сами от-
ветить на этот вопрос и лишь после этого можете смотреть, как на этот вопрос отвечают другие. В конце книги приведены адреса нескольких сайтов, в кото-
рых имеются форумы по программированию, в частности форум, посвященный программированию в среде Lazarus.
4. У вас должна быть создана (со временем, конечно!) своя коллекция ал-
горитмов, собственных наработок, типовых приемов и даже готовых кусков ко-
да, которые вы будете вставлять в будущие свои программы.
И, наконец, сплошь и рядом встречаются ситуации, когда не помогает ни опыт, ни знания. Как быть? Готовых рецептов не существует. И здесь снова хо-
чу подчеркнуть, что программирование это творчество. А в творчестве нет, и не может быть никаких готовых рецептов. Здесь, как говорится, дело в "искре божьей"! Уместно вспомнить и высказывание Остапа Бендера – "блондин игра-
ет в шахматы хорошо, брюнет играет плохо и никакие лекции не изменят этого соотношения сил"!
27
1.2 Этапы подготовки задачи для решения на компьютере
____________________________________________________________________
1.2. Этапы подготовки задачи для решения на компьютере
Процесс решения задачи на компьютере состоит из ряда этапов, включаю-
щих как подготовку задачи к решению, так и собственно решение.
Эти этапы включают:
1.постановку задачи;
2.построение модели изучаемого процесса или явления;
3.выбор метода решения;
4.разработка алгоритма решения задачи;
5.составление программы (кодирование);
6.отладка и тестирование программы;
7.собственно вычисления;
8.анализ полученных результатов.
Рассмотрим эти этапы.
Постановка задачи.
Под постановкой задачи подразумевается определение цели или целей, ко-
торых необходимо достичь в результате решения данной задачи. В постановку задачи входит определение необходимой информации (что дано), результата решения задачи (что требуется определить) и выработка общего подхода к ре-
шению задачи.
Построение соответствующей модели изучаемого процесса или явле-
ния.
На этом этапе производится выбор из всего множества зависимостей и свя-
зей основных, определяющих тот или иной реальный процесс, явление и фор-
мирование гипотез, позволяющих представить реальный, обычно достаточно сложный процесс, в виде уже известных процессов. Моделирование предусмат-
ривает некоторую разумную абстракцию, дающую возможность с достаточной точностью представить себе реальные физические, информационные или эко-
28
Глава 1 Основы программирования
____________________________________________________________________
номические процессы.
Для адекватного отражения сути изучаемого процесса или явления прихо-
дится разрабатывать различные модели. Чаще всего используются информаци-
онные и математические модели. В информационной модели указываются наиболее значимые характеристики объекта, имеющих существенное значение для данной задачи. Например, если создается база данных таксопарка, то наи-
более значимыми характеристиками такого объекта как автомобиль являются марка автомобиля, год выпуска, государственный номер и др.
Под математической формулировкой задачи или как ее иногда называют математической моделью, подразумевается любое математическое описание изучаемого процесса или явления в виде уравнений или неравенств. В качестве уравнений могут быть алгебраические и трансцендентные уравнения, системы линейных алгебраических уравнений, дифференциальные уравнения, инте-
гральные уравнения и т.д.
К математическому описанию предъявляются, в общем, противоречивые требования. С одной стороны математическое описание должно быть полным, с
другой стороны желательно, чтобы математические зависимости были проще.
Выбор метода решения.
Выбор метода решения зависит от вида модели, постановки задачи и воз-
можностей имеющихся средств вычислительной техники. Многие задачи мож-
но решить разными методами и способами, поэтому актуальным становится выбор оптимального метода. Причем критерии оптимальности даже для одной и той же задачи могут быть разными.
Например, разработать базу данных таксопарка с максимальным количест-
вом сервисных функций и процедур, причем руководство таксопарка готово за-
купить и установить столько компьютеров, сколько необходимо для успешного функционирования этой базы.
Или за неимением достаточных средств, руководство таксопарка согласно установить только один компьютер в планово-экономическом отделе. Ясно, что
29
1.2 Этапы подготовки задачи для решения на компьютере
____________________________________________________________________
базы данных в первом и втором случаях будут существенно разниться по своим функциональным возможностям и по методам, использованными разработчи-
ками для реализации этих баз данных.
Поскольку компьютеры оперируют с числами, то в качестве методов ре-
шения математических моделей обычно применяются численные методы. Пре-
образование математических выражений, характерное для классической мате-
матики, не является типичным при применении компьютеров. Хотя в последние годы появились мощные программные системы типа MAPLE, которые позво-
ляют производить и символьные вычисления. В то же время численные методы часто позволяют решать задачи, которые методами классической математики обычно неразрешимы.
Разработка алгоритма решения задачи.
Характер работы на этом этапе существенно зависит от предыдущих эта-
пов. Кроме того, имеет значение и размер задачи. Если это достаточно простая задача, с которой может справиться один человек, то работа может идти при-
мерно так, как в примере, рассмотренном в предыдущем разделе (задача о по-
ездах и мухе).
Для средних и крупных проектов, для реализации которых могут потребо-
ваться группа или даже целый коллектив программистов, возникают проблемы определения методологии проектирования, планирования и распределения ра-
бот между членами группы, их взаимодействия и пр.
Важное значение имеет выбор средств проектирования и разработки ПО. В
настоящее время широкое распространение получили так называемые RAD-
системы (Rapid Application Development – быстрая разработка приложений). В
качестве примера приведу такие системы так Microsoft Visual Studio 2008, Code Gear RAD Studio 2009, Embarcadero RAD Studio 2010 в которых имеются разви-
тые средства для разработки ПО в коллективе.
30