Основные приемы программирования
Сведение сложного к простому. Цикл. Итак, чтобы заставить компьютер что-то сделать, нужно написать программу. И тут невольно возникает вопрос - неужели возможно, записывая одна за другой довольно примитивные команды языка программирования, написать программы для всех тех замечательных умений компьютера, некоторые из которых я привел в1.1? Возьмем, например, игру в воздушный бой. Ведь самолетик по экрану должен двигаться! Но в списках команд большинства языков программирования, используемых профессиональными программистами для создания таких игр, нет команды движения. Или возьмем вычисление траектории полета к Марсу. Для ее вычисления нужно решать сложнейшие дифференциальные уравнения высшей математики. Но процедуры языков Фортран, Бэйсик, Паскаль, которые используются для этих целей, не могут ничего, что выходит за рамки школьного курса. И непонятно, в конце концов, как научить компьютер разговаривать, если в нашем распоряжении только команда извлечения из компьютера простого звука заданной высоты.
На все эти вопросы ответ один: если вы хорошо разбираетесь в поставленной задаче, то вы обязательно сможете разложить ее на много маленьких задач, каждая из которых вполне поддается программированию, после чего из многих получившихся программок можно собрать одну большую программу, которая и решает задачу. Разберем для иллюстрации несколько основных идей и приемов сведения сложного к простому.
Возьмем воздушный бой. Здесь нужно задаться вопросом - а что такое движение? Рассмотрим иллюзию движения, возникающую на экране кинотеатра. Если вы держали в руках кинопленку фильма, изображающего, скажем, движение автомобиля, то должны были обратить внимание, что она состоит из множества неподвижных слайдов (кадров), на каждом следующем из которых автомобиль находится чуть-чуть в другом месте, чем на предыдущем. Показывая эти кадры один за другим с большой скоростью, мы создаем иллюзию движения автомобиля. Точно так же поступают с созданием движения на экране компьютера. Запишем алгоритм движения по экрану слева направо обыкновенного кружочка:
1.Зададим позицию кружочка в левой части экрана. Перейдем к команде 2.
2.Нарисуем кружочек. Перейдем к команде 3.
3.Сотрем его. Перейдем к команде 4.
4.Изменим (в уме компьютера) позицию кружочка на миллиметр правее. Перейдем к команде 5.
5.Перейдем к команде 2.
Каждая из приведенных команд алгоритма легко программируется на большинстве языков. Кстати, любой компьютер, выполнив очередную команду, автоматически переходит к выполнению следующей (так что нам не обязательно было писать, скажем, во второй команде "Перейдем к команде 3."). Однако, если мы захотим, то можем заставить компьютер изменить этот порядок, что мы и сделали в команде 5, благодаря чему компьютер стал многократно выполнять последовательность команд 2-3-4-5. Такая многократно выполняемая последовательность называется циклом. Цикл - основное средство заставить компьютер сделать много при помощи короткой программы.
В коротком промежутке времени после выполнения команды 2 кружок будет появляться на экране и на команде 3 исчезать, но этого достаточно, чтобы человеческий глаз его заметил. Благодаря циклу кружок будет мелькать каждый раз в новом месте, а поскольку смена “кадров” будет очень быстрой, нам будет казаться, что происходит плавное движение кружка.
Теперь перейдем к задаче о траектории. Существует наука - вычислительная математика - которая утверждает, что решение многих самых сложных и страшных математических уравнений можно свести к многократному выполнению четырех действий арифметики, и показывает, как это делать. Грубо говоря, вместо решения одного уравнения она предлагает выполнить пять миллионов сложений. Это как раз то, что нужно компьютеру. Пять миллионов сложений он выполнит за секунду.
И наконец о том, как научить компьютер разговаривать. Акустикам хорошо известно, что любой звук человеческого голоса можно заменить наложением многих простых звуков различной высоты. Наложением сложным и в разные моменты времени разным, однако вполне поддающимся программированию.
Собственные процедуры.. Большую помощь в упрощении программирования сложных задач оказывает возможность, предоставляемая программисту большинством языков, составлять собственные процедуры[3]из команд и операторов языка. Составляется процедура точно так же, как в 2.3 для робота составлялась процедура ПЕРЕСТАВЬ СТУЛ. Пусть, например, вы хотите, чтобы компьютер изобразил на мониторе три поезда, каждый из которых состоит из одного паровоза и четырех вагонов. Сначала мы пишем программу для рисования вагона (прямоугольник и четыре кружочка). Сейчас мы не будем обсуждать, как правильно расположить на экране друг относительно друга прямоугольник, кружочки, вагоны и поезда. Вам остается поверить, что делается это довольно легко. Вот алгоритм программы из 5 команд для рисования вагона:
1.Нарисовать прямоугольник.
2.Нарисовать кружочек.
3.Нарисовать кружочек.
4.Нарисовать кружочек.
5.Нарисовать кружочек.
Для того, чтобы нарисовать четыре вагона, вам понадобилась бы программа из 20 команд. Писать их утомительно, поэтому программисты поступают по-другому. Программу рисования вагона они называют процедурой и придумывают ей имя, скажем, ВАГОН и сообщают его компьютеру. Аналогично процедуре ВАГОН они составляют процедуру ПАРОВОЗ (которую я не буду приводить). Из обращений к этим готовым процедурам они составляют процедуру ПОЕЗД, алгоритм которой будет выглядеть так:
1.Выполни процедуру ПАРОВОЗ
2.Выполни процедуру ВАГОН
3.Выполни процедуру ВАГОН
4.Выполни процедуру ВАГОН
5.Выполни процедуру ВАГОН
И наконец, они пишут программу для рисования трех поездов, которая оказывается совсем короткой:
1.Выполни процедуру ПОЕЗД
2.Выполни процедуру ПОЕЗД
3.Выполни процедуру ПОЕЗД
При отсутствии процедур пришлось бы писать программу из нескольких десятков команд. Выигрыш в объеме работы и в понятности записи программы очевиден.
Ветвление(выбор). У начинающего программиста интерес должен вызвать такой вопрос: как компьютер принимает решения, как он выбирает, какое действие из нескольких возможных нужно выполнить в данный момент? Возьмем тот же воздушный бой. Предположим, при нажатии на клавишу R самолет летит вверх, при нажатии на клавишу V - вниз. Как компьютер чувствует нажатие на клавиши, откуда он знает, что нужно делать при нажатии на каждую из них? Естественно, этот выбор делает программа для игры в воздушный бой, сам по себе компьютер ничего выбрать не может. В программе заранее пишутся процедуры для полета вверх и для полета вниз, а выбор между ними делает специальная команда выбора, имеющаяся в каждом языке программирования. Вот алгоритм выбора между полетом вверх и вниз:
1.Определи, нажата ли какая-нибудь клавиша.
2.Если не нажата, то переходи к команде 5.
3.Если нажата клавиша R, то выполняй процедуру ВВЕРХ.
4.Если нажата клавиша V, то выполняй процедуру ВНИЗ.
5.Продолжай полет.
Здесь команды 2,3,4 - команды выбора. В общем случае команда выбора содержит условие, от которого зависит, будет ли выполняться какая-нибудь команда или группа команд. Это условие может быть самым разным: нажата или нет любая клавиша, нажата или нет конкретная клавиша, больше ли одно число другого, правда ли, что с клавиатуры введено такое-то слово и т.д.
Напишем для примера примитивный алгоритм, позволяющий имитировать вежливое общение компьютера с человеком при включении компьютера:
1.Покажи на мониторе текст "Здравствуйте, я - компьютер, а вас как зовут?"
2.Жди ответа с клавиатуры.
3.Если на клавиатуре человек набрал "Петя" или "Вася", то покажи на мониторе текст "Рад встретиться со старым другом!", иначе покажи на мониторе текст "Рад познакомиться!"
4.Покажи на мониторе текст "Чем сегодня будем заниматься - программировать или играть?"
5.Жди ответа с клавиатуры.
6.Если . . . . . . . . . . . . . .
. . . . . . . . . . . . .
Выбор называют ветвлением по аналогии с разветвляющимся деревом (когда мы залезаем на дерево, мы время от времени делаем выбор, по какой из нескольких веток лезть дальше).
На этом мы завершим умозрительное рассмотрение основных идей программирования. Конкретное их воплощение отложим до изучения Паскаля. А сейчас пришла пора посмотреть на внутреннее устройство компьютера.
Не нашли, что искали? Воспользуйтесь поиском по сайту:
©2015 - 2024 stydopedia.ru Все материалы защищены законодательством РФ.
|