Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Тurbo Pascal 7+.doc
Скачиваний:
12
Добавлен:
24.12.2018
Размер:
10.09 Mб
Скачать

2.7. Последовательность работы программиста на компьютере

Работа программиста состоит в следующем:

  1. Сначала программист получает задачу, например, нарисовать домик или вычислить траекторию полета на другую планету.

  2. Затем он думает, как из команд (операторов), которые ему пре­доставляет язык программирования, написать программу. На обдумывание и написание программы уходит от нескольких минут до нескольких дней, в зависимости от сложности задачи. Почти всегда программист, чтобы не запутаться, пишет сначала для се­бя алгоритм программы, а потом уже программу.

3. Наконец программа написана. Теперь программист включает компьютер и нажатием нескольких клавиш приказывает ему приготовиться к приему программы.

4. Программист набирает всю программу (если, конечно, она не очень длинная) от первой до последней буквы на клавиатуре. При этом программа запомина­ется в его памяти. Программа попала в память компьютера, но это не значит, что компьютер программу "узнал" и "понял", как узнает и понимает человек. Человек, прочитав какую-нибудь программу, воспринимает ее целиком и хотя бы примерно представляет ее назначение, структуру и т. п. Компьютер же никогда программу из своей памяти целиком не читает и никогда не понимает ее общего смысла и назначения (но это не значит, что он не сможет ее выполнить).

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

  2. Все программисты допускают в программах ошибки. В результате этого почти никогда компьютер по только что написанной программе не делает того, что нужно. Увидев на экране косой домик, программист начинает искать в про­грамме команду с ошибкой. Найдя ошибоч­ную команду, он исправляет программу и вновь запускает ее на выполнение. Однако результаты снова обычно бывают плачевные. Это происходит потому, что часто программа содержит сразу несколько ошибок. Исправив очередную ошибку, программист снова запускает программу и т. д. Этот процесс называется отладкой. Отладка заканчивается, когда программист удовлетворен результатом работы програм­мы. Хотя, если программа сложная, это не всегда означает, что в ней ошибок больше нет! Просто некоторые ошибки влияют на результат почти незаметно, как, например, ошибка ВПЕРЕД 37 вместо ВПЕРЕД 38 в последней команде из програм­мы раздела 2.6.

2.8. Основные приемы программирования

От сложного к простому. Цикл. Итак, чтобы заставить компьютер что-то сделать, нужно написать программу. И здесь не­вольно возникает вопрос: неужели возможно, записывая одну за другой довольно примитивные команды языка программирования, написать программы для всех тех замечательных возможностей компьютера, некоторые из которых приведены в разделе 1.1. Возьмем, на­пример, игру в воздушный бой. Ведь самолет по экрану должен двигаться! Но в списках команд большинства языков программирования нет команды движения. Или возьмем траекторию полета к Планете. Для ее вычисления нужно решать сложнейшие дифференциальные уравнения высшей математики. Но процедуры языков Фортран, Бейсик, Паскаль, которые используются для этих целей, не могут ничего, что выходит за рамки школьного курса. И непонятно, в конце концов, как научить компьютер разговаривать, если в нашем распоряжении только команда извлечения из компьютера простого звука заданной частоты.

На все эти вопросы ответ один: если вы хорошо разбираетесь и поставленной задаче, то вы обязательно сможете разложить ее на много маленьких задач, каждая из которых вполне поддается программированию, после чего из многих получившихся программок можно собрать одну большую программу, которая и решает задачу. Действительно, когда у вас была задача нарисовать тележку, вы разбили ее на задачи рисования колес и корпуса. Если бы и эти задачи вам показались сложными, вы бы разбили их дальше и т. д.

Разберем для иллюстрации несколько основных идей и приемов сведения сложного к простому.

Возьмем воздушный бой. Здесь нужно задаться вопросом - а что такое движение? Рассмотрим иллюзию движения, возникающую на экране кинотеатра. Если вы держали в руках кинопленку фильма, изображающего, скажем, движение автомобиля, то должны были обратить внимание, что она состоит из множества неподвижных слайдов (кадров), на каждом следующем из которых автомобиль находится чуть-чуть в другом месте. Показы­вая эти кадры один за другим с большой скоростью, мы создаем иллюзию движения автомобиля. Точно так же поступают с созданием движения на экране компьютера. Запишем алгоритм движения по экрану слева направо обыкновенного кружочка:

  1. Зададим (в памяти компьютера) позицию кружочка в левой части экрана. Перейдем к команде 2.

  2. Нарисуем в заданной позиции кружочек. Перейдем к команде 3.

  3. Сотрем его. Перейдем к команде 4.

  4. Изменим (в памяти компьютера) позицию кружочка на миллиметр правее. Перейдем к команде 5.

  5. Перейдем к команде 2.

Каждая из приведенных команд алгоритма легко программируется на большинстве языков. В разделе 9.7 мы напишем эту про­грамму на Паскале. Кстати, любой компьютер, выполнив очеред­ную команду, автоматически переходит к выполнению следующей (так что нам не обязательно было писать, скажем, во второй коман­де ПЕРЕЙДЕМ К КОМАНДЕ 3). Однако если мы захотим, то можем заставить компьютер изменить этот порядок, что мы и сделали в команде 5, благодаря чему компьютер стал многократно выполнять последовательность команд 2-3-4-5. Такая многократно выполняемая последовательность называется циклом. Цикл - основное средство заставить компьютер сделать много при помощи короткой программы.

В коротком промежутке времени после выполнения команды 2 кружок будет появляться на экране и по команде 3 исчезать, но это­го достаточно, чтобы человеческий глаз его заметил. Благодаря команде 4 кружок будет мелькать каждый раз в новом месте, а, по­скольку смена "кадров" будет очень быстрой, нам будет казаться, что происходит плавное движение кружка.

Теперь перейдем к задаче о траектории. Существует наука - вы­числительная математика, которая утверждает, что решение многих самых сложных математических уравнений можно свести к многократному выполнению четырех действий арифмети­ки, и показывает, как это делать. Грубо говоря, вместо решения од­ного сложного уравнения она предлагает выполнить 5 миллионов простых сложений. Это как раз то, что нужно компьютеру. Пять миллионов сложений он выполнит за секунду.

Собственные процедуры. Большую помощь в упрощении про­граммирования сложных задач оказывает возможность, предостав­ляемая программисту большинством языков, составлять собствен­ные процедуры из команд и операторов языка. Составляется про­цедура точно так же, как в разделе 2.3 для робота составлялась процедура ПЕРЕСТАВЬ СТУЛ. Пусть, например, вы хотите, чтобы компьютер изобразил на мониторе 3 поезда, каждый из которых со­стоит из одного паровоза и четырех вагонов. Сначала мы пишем программу для рисования вагона (прямоугольник и 4 кружочка). Сейчас мы не будем обсуждать, как правильно расположить на эк­ране друг относительно друга прямоугольник, кружочки, вагоны и поезда. Это не принципиально. Вот алгоритм программы из пяти команд для рисования вагона:

  1. Нарисовать прямоугольник.

  2. Нарисовать кружочек.

  3. Нарисовать кружочек.

  4. Нарисовать кружочек.

  5. Нарисовать кружочек.

Для того чтобы нарисовать 4 вагона, вам понадобилась бы про­грамма из 20 команд. Писать их утомительно, поэтому программи­сты поступают по-другому. Программу рисования вагона они назы­вают процедурой, придумывают ей имя, скажем ВАГОН, и сообща­ют его компьютеру. Аналогично процедуре ВАГОН они составляют процедуру ПАРОВОЗ. Из обращений к этим готовым процедурам они составляют процедуру ПОЕЗД, ал­горитм которой будет выглядеть так:

  1. Выполни процедуру ПАРОВОЗ.

  2. Выполни процедуру ВАГОН.

  3. Выполни процедуру ВАГОН.

  4. Выполни процедуру ВАГОН.

  5. Выполни процедуру ВАГОН.

И, наконец, они пишут программу для рисования трех поездов, которая оказывается совсем короткой:

  1. Выполни процедуру ПОЕЗД.

  2. Выполни процедуру ПОЕЗД.

  3. Выполни процедуру ПОЕЗД.

При отсутствии процедур пришлось бы писать программу из не­скольких десятков команд. Выигрыш в объеме работы и в понятно­сти записи программы очевиден.

Ветвление (выбор). У начинающего программиста интерес должен вызвать такой вопрос: как компьютер принимает решения, как он выбирает, какое действие из нескольких возможных нужно выполнить в данный момент? Возьмем тот же воздушный бой. Предположим, при нажатии на клавишу R самолет летит вверх, при нажатии на клавишу V - вниз. Как компьютер чувствует нажатие на клавиши, откуда он знает, что нужно делать при нажатии на каждую из них? Естественно, этот выбор делает программа для игры в воздушный бой, сам по себе компьютер ничего выбрать не может. В программе заранее пишутся процедуры для полета вверх и для полета вниз, а выбор между ними делает специальная команда выбора, имеющаяся в каждом языке программирования. Вот алгоритм выбора между полетом вверх и вниз:

  1. Определи, нажата ли какая-нибудь клавиша.

  2. Если не нажата, то переходи к команде 1

  3. Если нажата клавиша R, то выполняй процедуру ВВЕРХ.

  4. Если нажата клавиша V, то выполняй процедуру ВНИЗ.

  5. Продолжай полет.

Здесь команды 2,3,4- команды выбора. В общем случае коман­да выбора содержит условие, от которого зависит, будет ли выпол­няться какая-нибудь команда или группа команд. Это условие мо­жет быть самым разным: нажата или нет любая клавиша, нажата или нет конкретная клавиша, больше ли одно число другого, правда ли, что с клавиатуры введено такое-то слово, нажата ли левая кноп­ка мыши и т. д.

Напишем для примера примитивный алгоритм, позволяющий имитировать вежливое общение компьютера с человеком при вклю­чении компьютера:

  1. Покажи на мониторе текст "Здравствуйте, я - компьютер, а Вас как зовут?".

  2. Жди ответа с клавиатуры.

  3. Если на клавиатуре человек набрал "Петя" или "Вася", то покажи на мониторе текст "Рад встретиться со "старым другом!", иначе покажи на мониторе текст "Рад познакомиться!".

  4. Покажи на мониторе текст "Чем сегодня будем заниматься - программировать или играть?".

  5. Жди ответа с клавиатуры.

  6. Если...

Выбор называют ветвлением по аналогии с разветвляющимся деревом (когда мы залезаем на дерево, мы время от времени делаем выбор, по какой из нескольких веток лезть дальше).

На этом мы завершим рассмотрение основных идей программирования. Конкретное их воплощение отложим до изучения Паскаля. А сейчас пришла пора посмотреть на внутреннее устройство компьютера.