3887-1 (607638), страница 2
Текст из файла (страница 2)
INPUT year
PRINT «Вот это да!»
END.
Попробуйте набрать ату программу и посмотрите, как она работает. Надеюсь, Вы не забыли, что запускается программа командой RUN.
После запуска программы на дисплее появился вопрос: «В каком году родился Платон?» и чуть ниже вопросительный знак. Вопросительный знак показывает, что машина ожидает от Вас ввода с клавиатуры какого-нибудь числа. После ввода в компьютер числа (например, 428 - Платон родился 427(428 г. до н.э.; после ввода числа не забудьте нажать ENTER) компьютер выведет на дисплей фразу «Вот это да!». И работа программы закончится. Как Вы думаете, почему? Правильно, потому, что после выполнения предписания на третьей строке, машина обращается к четвертой, а там стоит оператор END, показывающий, что на этом этапе программа закончена. Запомните на всякий случай команду END и, если захотите, снова запустите программу командой RUN.
А теперь вопрос. Можно ли сделать эту программу бесконечной? Чтобы она все время спрашивала о годе рождения Платона и, получив ответ, вновь им интересовалась? Подумайте, мы об этом уже говорили.
Р.S. В этой программе, как Вы можете убедиться, мы не учли некоторых обстоятельств. Ну, например, как она себя поведет, если Вы по ошибке или из любопытства введете буквенные символы или нажмете на какую-нибудь другую клавишу. Попробуйте и посмотрите на реакцию компьютера. А в дальнейшем, когда Вы лучше освоите программирование, подумайте, как Вам описать в программе все эти случаи. Уверен, Вы быстро убедитесь, что это совсем не трудно!
§3. Может ли компьютер оценить высказывание?
Теперь давайте усложним нашу программу, чтобы она могла анализировать наше высказывание. Начнем, как обычно, с самого простого. Возьмем нашу последнюю программу и слегка ее дополним. Только вот что. Давайте изменим ее нумерацию на порядок. То есть вместо того, чтобы нумеровать строки 1, 2, 3, 4 будем нумеровать 10, 20, 30, 40. Что это нам даст? А то, что структура программы станет более пластичной. Например, если раньше между первым и вторым оператором мы ничего не могли вставить, так как нумерация BASIC (в отличие, скажем, от FOCAL) не признает дробных чисел, то при новой системе мы сможем легко вставить между 10-й и 20-ой строкой целых девять строчек. То есть программа становится как бы «дышащей».
Итак, начинаем дополнять нашу программу. Давайте сделаем так, чтобы она давала различную реакцию на разные цифры, вводимые Вами в компьютер. В принципе мы можем сделать, чтобы она реагировала на каждое различие, но для простоты давайте договоримся так. Если введенное число будет больше 500, то ответом будет «Вот это да!», если число, обозначающее год рождения Платона, будет в пределах от 400-500 включительно, то компьютер отреагирует такой репликой: «Как хорошо Вы знаете историю философии!». При вводе числа в пределах от 300 до 400 ответ будет выглядеть так: «Ну, это не совсем точно», от 200-300 - «Вы, вероятно, оговорились!», наконец, все числа меньше 200 вызовут у компьютера реакцию: «Этого не может быть!». Ну а теперь, если не возражаете, приступим к построению программы.
Не забывайте, что нумерация строк v нас теперь будет через десяток, и что мы теперь будем использовать операторы IF... THEN... ELSE. Давайте посмотрим, что у нас получилось:
10 PRINT «В каком году родился Платон?»
20 INPUT year
30 IF year >500 THEN PRINT «Вот это да!»
40 IF year>400 & year < 500 THEN PRINT «Как хорошо Вы знаете историю философии!».
50 IF year>300 & year < 400 THEN PRINT «Ну, это не совсем точно»
60 IF year>200 & year < 300 THEN PRINT «Вы, вероятно, оговорились!»
70 IF year < 200 & year THEN PRINT «Этого не может быть!»
80 END.
Вы, наверное, сразу обратили внимание, что мы использовали еще одну команду. Это оператор AND , то есть «и». Значение его очевидно. Скажем, проанализируем 40-ю строку программы. Ее можно описать так: если введенное число, обозначающее год рождения Платона, равно или больше 400 и, в то же время, меньше 500, то печатай: «Как хорошо Вы знаете историю философии!»
Если же введенное число не соответствует условию, заданному в 40-й строке, то компьютер начинает проверять на соответствие следующую, то есть 50-ю строку и т.д.
Ну а теперь давайте запустим программу (команда запуска RUN ). Сначала появился вопрос: «В каком году родился Платон?» И на следующей строке появился вопросительный знак, показывающий, что компьютер ждет от нас ввода ответа с клавиатуры. Допустим, мы ввели число «428». Наша программа начинает его анализировать. Проверяет, соответствует ли введенное число условию, заданному в 30-й строке, то есть больше ли оно 500. Если бы условие было выполнено, то на дисплее появилась бы уже знакомая нам строка «Вот это да!». Но 428 меньше 500, поэтому компьютер переходит к 40-й строке программы.
В 40-й строке осуществляется проверка - находится ли наше число в пределах от 400 до 500. Так как наше число - 428 - находится именно в этих пределах, на дисплее появляется реплика - «Как хорошо Вы знаете историю философии!» Далее компьютер последовательно проверяет: не соответствует ли наше число другим условиям, заданным в строках 50,60,70. Но такого соответствия нет, и поэтому машина доходит до 80-й строчки программы и согласно ее предписанию END прекращает работу. Если мы снова захотим запустить эту программу, то снова должны дать команду RUN.
А теперь вопрос, как нам зациклить программу? То есть сделать так, чтобы отреагировав на ответ, машина вновь (автоматически) задала нам вопрос, напомним, что лучше всего это сделать, используя оператор (команду) goto.
Итак, мы с Вами убедились, что машина вполне может оценить формально описанное высказывание. Но компьютер может реагировать не только на числа, аи на другие символы и их сочетания. Ну, например, Вы хотите, чтобы перед началом работы с какой-нибудь программой, ее пользователь получил приятный настрой на общение с ней. Тогда можно сделать так. Сначала пусть машина поздоровается с пользователем, затем узнает, как его зовут, и положительно отзовется об его имени (это всегда подкупает).
Только вначале договоримся, что переменную имени мы обозначим NAME , а так как вводить с клавиатуры потребуется буквенные символы, то в конце имени переменной мы должны будем поставить значок доллара $, чтобы машина поняла, что речь идет о слове, а не о числе. Итак, договорились, наша переменная будет выглядеть так:
NAME.
10 PRINT «Добрый день! Как Вас зовут?»
20 PRINT NAME $
30 PRINT «Какое прекрасное имя!»
40 PRINT «Позовите, пожалуйста, кого-нибудь еще».
50 goto 10
Как Вы, наверное, успели заметить - здесь мы зациклили программу. И она способна работать бесчисленное количество раз, до тех пор, пока компьютер не отключат. Мы можем внести в эту программу коррективы, если, конечно, сочтем необходимым. Ну, например, мы хотим, чтобы на определенные имена эта программа реагировала по-особенному. Скажем, нам очень нравится имя Ирина. Пусть оно и в программе будет выделено из ряда других. Для этого нам нужно задать в программе необходимое условие. Выглядеть это будет примерно так: если (IF) переменная (NAME$) будет равна «Ирине», то (THEN ) печатай (PRINT ) «Это имя приводит меня в восторг!».
Это условие вполне уместится в одной строке. А строку мы поместим где? Правильно, между 20-й и 30-й строчкой. Пусть номер этой строки будет 25.
10 PRINT «Добрый день! Как Вас зовут?»
20 INPUT NAME$
25 INPUT «Ирина» THEN PRINT «Это имя приводит меня в восторг!»
30 PRINT «Какое прекрасное имя!»
40 PRINT «Позовите, пожалуйста, кого-нибудь еще».
50 goto 10
Запустите программу и посмотрите, что у Вас получилось. А теперь подумайте, можно ли сделать так, чтобы в случае ввода имени «Ирина», программа сообщала лишь о восторге и не печатала «Какое прекрасное имя!» (но печатала ее во всех других случаях). Подсказка - здесь нужно использовать оператор ELSE. Но где и как? Подумайте!
§ 4. Постановка задачи
Ну, а теперь, после того, как мы получили некоторое представление о программировании, поговорим о том, что нужно для того, чтобы «объяснить» свою задачу.
Для начала было бы неплохо, если бы Вы сами имели четкое представление о том, что Вы хотите. Под четкостью имеется в виду не то простое обстоятельство, что «я хотел бы иметь хорошую программу по истории философии, которая бы работала со мной в режиме диалога». Этого, конечно, мало. Это только начало постановки задачи и, как Вы, вероятно, догадываетесь, исходя из предыдущего, на такое благопожелание компьютер вряд ли отзовется.
Когда мы с вами составляли предыдущие программы, мы поняли, что компьютер «понимает» ряд команд (например, «печатай», «перейди к строке такой-то», «если», «то», «иначе», «конец», «ввести символ»). Набор этих команд (общее их количество в BASIC примерно сорок-пятьдесят) составляет язык, который «понимает» компьютер. Так вот, на этом языке мы и должны описать все наши действия.
Однако сразу с листа программу написать сложно. Так как нам неудобно держать в голове все логические связи между различными частями программы. Конечно, если программа простая (ну вроде тех, что нам с Вами знакомы), то, при некотором кавыке это можно делать достаточно легко. Но, если она достаточно разветвленная, имеет несколько вариантов ответа на предъявленный вопрос, то без графического описания программы обойтись довольно трудно.
Проиллюстрируем эту мысль примером.
Здесь уже не раз упоминалось имя Платона. Давайте возьмем один из его диалогов, скажем, диалог «Тимей» (См. Платон. Соч.: В 3-х т. T.3. ч.I. M. I97I. C.455-543) и попытаемся на основе этoгo произведения создать программу.
Очевидно, что вначале мы должны будем описать то, что мм хотим получить в самом общем виде. Пусть это будет программа, предназначенная для обучения студентов. Далее, пусть это будет программа, которая работает в режиме диалога, то есть она будет предлагать вопрос и некоторый набор ответов, из которых студент должен будет выбрать наиболее предпочтительный. Затем мы должны будем указать машине, какие ответы правильные, а какие нет, а также, что делать в случае того или иного ответа, как верного, так и неверного. Итак, в общих чертах задача поставлена. И теперь дело за частностями, которые, как и во всех других делах, в конечном счете, все и определяют. Если Вы еще раз пробежите глазами приведенные выше условия, Вам станет ясно, что без глубокого знакомства с диалогом Платона и с комментариями к нему, с научной литературой, посвященной творчеству Платона, не обойтись. Это Вы должны запомнить хорошо. Если Вы хотите, чтобы компьютер помогал Вам в учебной, научной и всякой другой деятельности, Вы должны будете наполнить его содержанием. Содержательная сторона всегда будет определять выбор средств представления философских знаний в компьютерных системах.
Итак, берем диалог Платона «Тимей», внимательно читаем его, обдумываем, какие вопросы взять из этого произведения, в какой формулировке, в авторской или собственной. Подбираем ответы на эти вопросы, как правильные, так и не очень. Расставляем эти вопросы в определенном порядке, устанавливая, какой будет первым, какой вторым и так далее. И после этого начинаем разрабатывать алгоритм программы.
Давайте же подберем эти вопросы. Чтобы программа не была для нас слишком большой, так как мы еще начинающие программисты, остановимся на пяти вопросах.
А) Первый вопрос будет выглядеть так:
«Содержит ли диалог Платона Тимей концепцию Космоса как живого существа, одаренного умом?»
Далее мы должны предложить какой-то выбор ответов, так как все возможные варианты мы не можем представить сами и, соответственно, зал ожить в маши ну. Давайте для простоты остановимся на трех вариантах. Первый (назовем его «1») пусть будет неверный, второй («2») -правильный, третьим будет «не знаю» («3»). Учитывая вариант «А», мы даем возможность студенту не согласиться с первыми предложенными и ознакомиться с точкой зрения самого Платона.
Если Вы знакомы с содержанием диалога Платона «Тимей», то наверняка скажете, что проще всего варианты ответов выразить таким образом:
Нет
Да
Не знаю
А теперь попробуйте сообразить, что машина должна будет сделать (что нужно заставить ее сделать) в случае, если студент решит нажать клавишу «1» или «2» или «3».
Поскольку ответ «1» (Нет) неправильный, давайте сделаем так. Выдадим диагностику ответа:
«Вы ошиблись, подумайте еще раз!»
А затем вернем студента к первому вопросу с тем, чтобы дать ему возможность ответить правильно. (Заметим, что в этой программе наша задача научить студента, а не проконтролировать его знания!) Правильность второго ответа (Да) надеюсь, прозрачна, и поэтому мы переведем студента, нажавшего вторую клавишу, ко второму вопросу Или нет, давайте, чтобы у него не оставалось сомнений в солидной глубине собственных знаний сначала сообщим ему, что ответ верен, а затем предложим следующий вопрос («Б»).













