«Азы» программирования и обучающие программы.
Р.Манекин
При первом знакомстве с человеком (особенно если это знакомство обещает быть долгим, прочным) принято справляться о его семье, об основных этапах его биографии, о приемлемом для него языке (способе) общения. Сегодня Вы знакомитесь с новым аппаратом – КОМПЬЮТЕРОМ. Почему бы Вам не поступить в этом случае аналогичным образом? А именно: постараться побольше узнать о том, что представляет из себя эта новая для Вас машина.
В разрешении этой проблемы Вам помогут первые разделы данного пособия.
§ I. Общие сведения об ЭВМ.
История ЭВМ насчитывает вот уже более полутора столетий. У истоков электронно-вычислительной техники стояли такие известные инженеры и исследователи, как Ч.Беббидж, А.Лавлейс (дочь Ч.Байрона), Дж. Буль, Ф.М.Слободской, В.Я.Слонимский, И.Штоффель, Ю.М.Дьяков, П.Л. Чебышев, Г.Холлерит, Атанасов, Айткен, др. Первая ЭВМ, обладающая всеми компонентами современного компьютера (промежуточной внутренней памятью, программным обеспечением, проч. - речь ждет о машине «EDSAC», изобретенной Дж.Эккертом и Дж.Моучли) была создана в 1947 г. в Пенсильванском университете (Англия). С тех пор сменилось уже три поколения ЭВМ, каждое из которых отличалось от другого целым набором технических характеристик. А именно:
I. своей элементной базой[1]
2. быстродействием[2] ;
3. объемом оперативной памяти[3]
4. математическим обеспечением;
5. внешними устройствами[4] , [5] , проч,
Сегодня существует уже несколько видов и несчетное количество модификаций (типов) ЭВМ, а общий объем парка ЭВМ превышает 109 машин.[6]
Большинство ЭВМ работает на основе двоичной системы счисления.[7] Что это такое?
Двоичной навивается такая система счисления, где есть только две цифры - ноль и единица.
Почему изобретатели ЭВМ отказались от привычной нам десятичной системы и перешли на иную?
Дело в том, что электронные системы, в которых электрический ток может находиться в двух состояниях (или он есть в цепи, или его нет), наиболее просты и надежны. Вместе с тем даже с помощью двух цифр - 0 и 1 - можно записывать числа любой величины, складывать их, умножать и делить. Любое сообщение, самое сложное, может быть выражено в двоичном коде в виде серии ответов типа «да» и «нет».
(Если сообщение записано словами, можно найти каждое слово в словаре, задавая такие вопросы: находится ли оно в первой половине словаря - да или нет? Далее: находится ли оно в первой половине этой части - да или нет? И так далее. И в этом случае слову будет соответствовать цепочка чисел типа 100111001. Для того, чтобы зaкодировать слово в словаре в четверть миллиона слов, достаточно самое большее восемнадцати вопросов с ответами 1 или 0 (поскольку 218 больше 250 тыс)).
Однако современные программисты, конечно же, не пользуются при написании своих программ двоичным кодом. Обычно они используют т.н. языки программирования - набор универсальных команд, легко усваиваемых человеком и «понятных» электронно-вычислительным машинам. Различают машинно-ориентированные языки программирования (или языки ассёмблерного типа) и языки программирования высокого уровня (алгоритмические, машинно-независимые языки).
Языки ассемблерного типа непосредственно «переводят» инструкции программистов в машинные команды. (Машинные команды различны для различных типов ЭВМ. Для их написания нужно хорошо знать «устройство» каждой конкретной машины, что с неизбежностью отвлекает специалистов от решения задач содержательного характера).
Алгоритмические языки предназначены для «промежуточного общения специалистов и электронно-вычислительных машин. Чтобы машина могла «понимать» алгоритмические языки, в памяти ЭВМ постоянно хранятся т.н. «трансляторы с языков программирования» - специальные программы-»переводчики» на язык машинных команд.
Среди языков высокого уровня различают процедурно-ориентированные и проблемно-ориентированные. К процедурно-ориентированным обычно относят универсальные языки (FORTRAN, PL-1, PASKAL, проч.); проблемно-ориентированные языки предназначены для решения узко специальных задач. Многие универсальные языки программирования часто используют для решения однотипных задач. Так, FORTRAN применяется при ведении вычислительных расчетов, PASKAL - для решения экономических задач, GPSS называют «языком моделирования», BASIС считается языком, упрощающим процесс пользования ЭВМ.
К настоящему времени количество официально зарегистрированных алгоритмических языков достигает двух тысяч. Из них широко распространены более 100. На овладение любым языком программирования подготовленному человеку требуется от нескольких недель до нескольких месяцев. Так что и Вы, немного потренировавшись, сможете самостоятельно выучить любой язык программирования, а затем и применять его при решении исследовательских задач.
Далее. Элементарные операции по работе с устройствами ЭВМ, по управлению ее ресурсами - все это операции очень низкого уровня. Работа пользователя на ЭВМ состоит из нескольких сотен или даже тысяч таких операций. Конечно, описывать каждую из них специально в компьютерных программах очень неудобно. Поэтому большинство современных электронно-вычислительных машин снабжены «встроенной» в память универсальной компьютерной программой, которая осуществляет управление устройствами ЭВМ, распоряжается ее ресурсами (оперативной памятью, проч.), запускает другие прикладные программы на выполнение и т.д.
Подобные программы называются операционными системами[8] . Основное назначение операционных систем состоит в том, чтобы скрыть от пользователя сложные и ненужные подробности управления машиной и предоставить ему удобный интерфейс (т.е. способ общения с ее устройствами).
Взаимодействие пользователя ЭВМ с операционными системами построено по принципу диалога. Практически это выглядит так: пользователь набирает на клавиатуре соответствующую команду - операционная система выполняет его инструкцию. Такой способ «общения» пользователя и ЭВМ ненагляден и недостаточно удобен, т.к. пользователь не имеет возможности корректировать свои действия. Поэтому программисты часто, наряду с операционными системами, вводят в память ЭВМ и т.н. «программы-оболочки». Функция этих программ состоит в том, чтобы выводить на экран монитора ЭВМ описания действий, которые производят операционные системы. С помощью «программ-оболочек» можно просматривать содержащиеся в памяти компьютера каталоги программ, копировать программы, запускать их на выполнение, др.[9]
При построении компьютерных программ принято придерживаться определенных правил[10] .
А именно: создавая ту или иную компьютерную программу, следует учитывать тип ЭВМ, для которой она предназначена, программную среду, в которой она должна существовать, изобразительные средства избранного Вами языка программирования;
при программировании нужно строго придерживаться синтаксиса избранного языка программирования; избегать использования нестандартных и машинозависимых конструкций;
программирование имеет несколько этапов: постановка задачи, составление алгоритма решения задачи, построение блок-схемы, написание программы. Начинающий программист должен соблюдать принцип поэтапности программирования;
при составлении больших программ необходимо придерживаться принципа модульности, предписывающего разбиение текста программы на отдельные логически завершенные части - подпрограммы. Наличие подпрограмм позволяет легко исправлять допущенные ошибки, широко использовать пакеты прикладных программ, проч.
5. любая составленная Вами программа должна быть записана так, чтобы ее без труда мог прочесть другой программист. Поэтому наиболее удачные компьютерные программы всегда снабжены комментариями, различными справочниками, проч.
Соблюдение этих простых правил сделает созданные Вами программы эффективным средством как обучения, так и исследования.
* * *
Что же. Будем считать, что Ваше первое знакомство с КОМПЬЮТЕРОМ состоялось? Замечательно! Тогда начнем знакомиться с ним поближе. Но только вот еще что... Для того, чтобы научиться пользоваться компьютером, нужно работать на нем. Чаще всего при проведении историко-философских исследований используются персональные компьютеры. Например, типа IBM РC. Если в Вашем компьютерном классе есть эти машины - не стесняйтесь! Садитесь за клавиатуру! И давайте приступим к работе.
§ 2. Что такое программа?
Вообще говоря, компьютер - это не более, чем механизм, способный воспринимать и генерировать электрические сигналы. То, что придает смысл компьютеру и оправдывает его назначение, называется «программой». В расхожем смысле «программа» - это некоторая последовательность действий, которая может привести нас к желаемому итогу. Думается, что это определение в общем и целом не противоречит многочисленным определениям данного термина, представленным в специальной научной литературе. Из этого определения для нас сейчас важно то, что программа может привести нас к желаемому результату и то, что программу характеризует пошаговость. То есть то, что она cocтоит из определенного количества промежуточных действий, которые мы должны произвести, если хотим ее осуществить.
Компьютерным программам, в отличие от массы других (например, программы спецкурса по истории философии), присуща строгая формализация. То есть каждый наш шаг должен быть в ней выражен определенно и непротиворечиво. Такую возможность нам дают современные языки программирования. Наиболее простым для усвоения обычно считается BASIС, и поэтому начнем знакомство с созданием программ, опираясь на эtot язык.
Язык программирования состоит из набора команд, которые обычно именуют операторами. Давайте ознакомимся сейчас с некоторыми из них, а затем попытаемся составить из этих операторов небольшую программу.
Итак, запомним, что оператор PRINT - означает - печатай. Оператор GOTO - означает - иди на (такую-то строку). По-английски мы бы написали GO ТО, но это BASIC, и поэтому запомните, пожалуйста, правильное написание на BASIС.
Оператор RUN запускает программу, то есть заставляет ее реализовываться.
Даже зная эти три оператора, можно написать микроскопическую программу. Давайте сделаем это. Но предварительно договоримся, что все операции мы будем нумеровать, чтобы компьютер знал, что делать вначале, а что потом.
1. PRINT «Как Вас зовут?»
2. GOTO
Итак, наша первая программа написана. Отметим также, что, если мы хотим, чтобы команда PRINT была выполнена, текст, следующий после этого оператора, нужно заключить в кавычки (это элемент синтаксиса BASIС). И еще одно - при наборе программы в конце каждой строки нажимайте клавишу ENTER.. Она, во-первых, обеспечит Вам запоминание компьютером этого фрагмента программы, а, во-вторых, переведет строку.
Теперь запустим программу. Команда запуска, как мы помним –RUN. Набираем RUN... И получаем бесконечную череду вопросов «Как Вас зовут?»
Давайте прервем череду, нажав на клавишу ЕSСАРE (она слева вверху клавиатуры), и разберемся как работает наша программа. В первой строке программы мы указали компьютеру, что хотим, чтобы он вывел на дисплей (то есть экран монитора компьютера) вопрос «как Вас зовут?». Но не сразу, а после запуска программы - это тоже необходимо усвоить. Во второй строке мы дали команду компьютеру перейти снова к первой строчке. И, таким образом, получился замкнутый круг. В программировании он называется «цикл», и в дальнейшем мы будем его использовать.
Если бы мы написали только первую строчку и сразу запустили прогpaмму (можете попробовать это сделать), то на дисплее появился бы только один вопрос «Как Вас зовут?», и программа бы завершилась. А оператор goto превращает процесс выполнения программы в бесконечный (пока включен компьютер и работает эта программа).
Вы скажете, что в приведенной программе нет никакого смысла. Что же, Вы, вероятно, правы. Давайте подумаем, как придать смысл нашей программе. Вы наверняка читали Платона. И знаете, что основной формой его произведений был диалог. И это не случайно. Издавна известно: лучшим способом преподавания учебного материала является диалог Учителя и Ученика.
А что, если мы попробуем создать программу, ориентированную на имитацию диалога? Но для того, чтобы решить эту задачу, наших знаний в программировании пока недостаточно. Поэтому перейдем снова к BASIC.
В BASIC есть конструкция, которую можно обнаружить и в английском языке. Речь идет о конструкции ЕСЛИ... ТО... ИНАЧЕ. Или, по-английски, IF... THEN... ELSE. Эта конструкция называется «условный переход». Она может реализовываться либо в полном виде, либо в усеченном: IF... THEN... (т.е. ЕСЛИ...ТО...). Пока запомним эту конструкцию и перейдем к способу представления информации, называемому «переменными».
Для того, чтобы обработать информацию, нужна не только программа и компьютер, нужна и собственно информация. В компьютер информация обычно вводится в виде так называемых «переменных». Переменные и составляют исходные данные, которые обрабатывает машина. Переменные бывают различных типов. Есть логические переменные - когда в компьютер вводится информация типа ДА или НЕТ. (У или N); есть числовые переменные, то есть переменные, выраженные каким-либо числом; есть текстовые переменные, выраженные буквой или текстом.
Чтобы различать переменные друг от друга, им присваивают имена. Имя переменной должно начинаться с буквы (это обязательно). Если переменных много, то, чтобы не запутаться, им дают такие имена, чтобы сразу было ясно назначение переменной в программе. Давайте создадим небольшую программу с использованием переменных. Но сначала запомним, что команда для ввода переменных обозначается так – INPUT.
Этот оператор предназначен для того, чтобы переменная вводилась студентом при помощи клавиатуры. Например, если мы составим такую программу, где будем спрашивать студента, в каком году родился Платон. Итак создадим переменную year ,но сначала зададим вопрос :
PRINT «В каком году родился Платон?»
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» (Нет) неправильный, давайте сделаем так. Выдадим диагностику ответа:
«Вы ошиблись, подумайте еще раз!»
А затем вернем студента к первому вопросу с тем, чтобы дать ему возможность ответить правильно. (Заметим, что в этой программе наша задача научить студента, а не проконтролировать его знания!) Правильность второго ответа (Да) надеюсь, прозрачна, и поэтому мы переведем студента, нажавшего вторую клавишу, ко второму вопросу Или нет, давайте, чтобы у него не оставалось сомнений в солидной глубине собственных знаний сначала сообщим ему, что ответ верен, а затем предложим следующий вопрос («Б»).
В том случае, если студент нажмет на клавишу «3», то есть предпочтет вариант «не знаю», мы дадим такую диагностику:
«Почитайте, пожалуйста, разделы 29е-31в диалога Платона Тимей».
(В принципе, здесь можно привести и само содержание этих разделов).
Затем переведем студента опять к первому вопросу, то есть, как мы выражались раньше, «зациклим» эту часть программы.
Б) следующий вопрос, если не возражаете, будет выглядеть так:
«Отождествлял ли Платон понятия Космос и Человек?»
I. Да
2. Нет
3. Не знаю.
Первый ответ неверен. Поэтому мы предъявляем студенту, нажавшему клавишу «1», такую реплику:
«Это искажение мысли Платона. Отождествление понятий Человек и Космос характерно для философии более позднего времени. Подумайте, пожалуйста, снова».
А затем, как Вы уже, наверное, догадались, мы возвращаем студента к вопросу «Б».
Второй ответ правильный. Поэтому, выдав положительную диагностику («Ответ верен»), переведем студента к вопросу «В». А впрочем, зачем такая сухость? Давайте стремиться создавать иллюзию диалога, может быть, ответим так:
«Вы правы, и я с удовольствием об этом сообщаю. Приятно побеседовать с умным человеком».
Да, пожалуй, так лучше. И теперь перейдем к третьему варианту. Здесь диагностика будет следующая:
«Посмотрите, пожалуйста, разделы 41а-47е диалога Платона Тимей».
(Здесь также было бы уместно привести содержание указанных разделов).
В) Следующий вопрос, который мы с Вами предъявим студенту (если Вы не согласны, то в дальнейшем можете легко заменить его на любой другой) будет иметь такой вид:
«Есть мнение, что специальный очерк учения Платона о космических функциях ума включает в себя концепцию гармонического членения Космоса - учение о взаимных расстояниях звезд и некоторых законах Природы. Согласны ли Вы с ним?
Да
Нет
Не знаю».
Для разнообразия мы решили правильный ответ поместить под номером один, поэтому в случае нажатия на клавишу «1» пусть машина выдаст реплику:
«Блестяще! Я от Вас другого и не ожидал».
И затем предложит студенту вопрос «Г».
В случае если студент ответит «Нет» (клавиша «2»), диагностика будет следующей:
«Вы неправы. Перечитайте, пожалуйста, разделы 3Iв-37с диалога Платона Тимей. Особенное внимание обратите на разделы 35в-37с названного произведения».
Если же студент сошлется на незнание («3»), то укажем ему место в первоисточнике, прочитав которое, студент сможет правильно ответить на этот вопрос. (В данном случае уместно предложить студенту ознакомиться с разделами 31в-37в диалога Платона «Тимей»).
А затем вновь вернем студента к тому же вопросу.
Г) Последний вопрос мы зададим несколько иначе, чтобы Дать Вал представления о возможности применения и других методик:
«Включает ли в себя специальный очерк учения Платона о космических функциях ума следующие концепции?
Учение о Времени и его органах.
Учение о высших классах живых существ или ставших богов.
Концепцию о соединении мирового тела и мировой души.
Учение о самых общих законах человеческого существования?
Не знаю».
Заметим, что мы решились предложить варианты ответа, опираясь
на сочинения Платона. То есть в диалоге «Тимей» подробно приведены (и в тех же терминах, что крайне важно с методической точки зрения) те варианты ответов, которые мы предложили студенту. Таким образом, содержательная часть нашей программы - свободна от упреков в вольном толковании теории Платона. Рекомендуем запомнить это несложное правило: Ваши вопросы и варианты ответов должны быть валидны и корректны.
Однако перейдем к репликам на различные варианты. Первый вариант неправильный. Поэтому реплика будет следующей:
«Ваш ответ неточен. Учение о Времени и его органах входит в общий, но не в специальный очерк учения Платона о космических функциях ума. Попробуйте сравнить содержания разделов 31-37с и 37с-39е диалога Платона Тимей. Затем перечитайте разделы 29е-47е названного произведения и попытайтесь ответить еще раз».
(Последнее требование необходимо для того, чтобы студент мог представить место названных доктрин Платона в контексте его учения о функциях космического ума).
После чего мы возвращаем студента к вопросу «Г». Если он предпочтет ответ «2» (неверный), то реплика будет такой:
«Подумайте еще раз. Советую перечитать разделы 31-37с и 39e-40d диалога Платона Тимей. Затем прочтите разделы 29е-47е и попытайтесь ответить снова».
И опять возвращаем студента к вопросу «Г». В том случае, если студент признает правильным ответ «3», он не ошибется. Мы отметим его успех, подкрепим его мыслью Платона и переведем к вопросу «Д»: «Вы правы, и я рад, что Вы справились и на этот раз (собственно я от Вас и не ожидал другого»).
(Здесь, как и раньше имело бы смысл привести содержание разделов 31в-37с диалога Платона Тимей).
Нажав на клавишу «4», студент получит разъясняющую реплику, и ему вновь будет предъявлен вопрос «г». Реплика будет выглядеть таким образом:
«Вы ошиблись. Сравните содержание разделов 31в-37 и 41a-d диалога Платона Тимей. Перечитайте также разделы 29е-47е названного произведения. Пожалуйста, попытайтесь ответить еще раз».
В том случае, если студент попытался отговориться незнанием, наша задача дать ему это знание, поэтому мы выдадим ему такую реплику:
«Познакомитесь с содержанием разделов 36 - 37с диалога Платона Тимей».
(Еще лучше, если здесь будет приведено содержание этих paзделов и указана литература, ознакомившись с которой студент сумеет правильно ответить на заданный вопрос).
Затем мы опять предложим студенту тот же вопрос, чтобы, вооружившись новым знанием, он смог на него правильно ответить и закрепить таким образом полученную информацию.
Д) Пятый вопрос снова будет не такой, как предыдущие. Здесь студенту будет предоставлена возможность либо узнать о композиции Диалога Платона «Тимей», либо вернуться к началу и повторить все заново, либо, если он считает, что все усвоил и сведения о композиции диалога «Тимей» ему неинтересны, закончить работу с программой, Итак пятый вопрос:
Мы с Вами поговорили о содержании диалога Платона Тимей. Теперь, если хотите, можете вернуться в начало программы и предложить другие ответы (если Вам любопытен какой-нибудь вариант возражения на Ваш ответ). Кроме того, Вы можете ознакомиться с композицией диалога Платона Тимей или же закончить работу с программой.
Возврат к началу программы.
Сведения о композиции диалога Платона Тимей.
Конец».
В случае, если обучаемый нажмет клавишу «1», то мы, сообразно его желанию, вернем его к вопросу «А», и он сможет поработать с программой заново (возможно ему будет интересно, какие возражения он получит, нажав на какую-нибудь другую клавишу). Если студент нажмет на клавишу «3» , то работа программы будет прекращена.
Если обучаемый проявит интерес к композиции диалога Платона «Тимей», то на дисплее появится следующее: «Композиция диалога Платона Тимей такова:
1) Вступление 2) Функция космического ума (разделы 29е-47е)
3) Функции первичной материи как необходимости (разделы 47е-69а).
4) Совокупное действие ума и материи в образовании человеческого организма (разделы 69-92в). 5) Заключение (раздел 92с).
1) Возврат к началу программы.
2) Конец».
И здесь мы тоже предлагаем обучаемому сделать выбор: хочет ли он продолжить работу с программой (клавиша «1») или прекратить (клавиша «2»).
§ 5. Построение блок-схемы
В предыдущем разделе мы показали, как нужно ставить задачу и прорабатывать ее до мельчайших деталей - последнее называется - составлять алгоритм программы. Дело это вполне посильное даже тем, кто никогда не сталкивался с программированием. Единственное условие -это хорошо знать предметную область (то есть разбираться в содержательной части). Впрочем, есть, еще одно - способность мыслить логически, чтобы различные части программы не противоречили друг другу. Но мы полагаем, априори, что этa способность у Вас есть.
Но всегда ли удобно так расписывать программы? Не удобнее ли представить ее графически? Мы интуитивно чувствуем, да и знаем из опыта, что все то, что можно охватить как единый информационный образ, воспринимается лучше. Есть этому и объяснение.
Данные современной археологии говорят о том, что если мы соотнесем на временной шкале расстояние от появления человека вида «хомо сапиенс» до создания им письменности с расстоянием от времени создания письменности до наших дней, то мы увидим, что первое относится ко второму как 99 к 1 (да и то в лучшем случае). Другими словами, человечество имеет намного больший опыт работы с информационными образами материальных объектов, чем с абстрактными чисто информационными образами (счет, письменность и т.д.).
«Этот исторический факт, - пишет известный специалист в области информатики Г.Р.Громов[11] - в значительной степени объясняет выигрыш в эффективности решения абстрактных информационных задач, который дают в настоящее время средства машинной графики. Графический дисплей по существу «материализует» абстрактные информационные образы и позволяет, таким образом, включить в процесс решения задачи наиболее мощные области человеческой интуиции (которые были развиты за первые 99% времени развития человеческого интелле