После К2 программа начинает формировать следующий член ряда 1/(n + 1).
Прежде всего команда КЗ формирует новый знаменатель, выполняя операцию: «Сложить число из ячейки Я2 (то есть n) с числом из ячейки Я1 (то есть с 1; получится n + 1, на первый раз это 1 + 1 = 2), результат направить снова в Я2, стерев предыдущее число (n = 1)». Последняя часть команды — обычная экономия: число n = 1 уже не нужно, оно уже побывало знаменателем (1/1, команда К1), и, чтобы не занимать лишнюю ячейку памяти, 1 убираем из Я2 и помещаем туда 2; это к тому же упростит последующие действия, а именно выполнение последующей команды: она найдет нужное ей новое число по знакомому старому адресу Я2.
Теперь можно было бы начать все сначала, с команды К1: найти член ряда 1/2 и прибавить его к предыдущей сумме. Однако до этого нужно проверить, не пора ли кончать вычисления. Поэтому после КЗ следует команда К4: «Сравнить число из ячейки Я2 (то есть n = 2) с числом из ячейки ЯЗ (то есть с числом 10), еслиn =< 10, продолжить вычисления и перейти к команде К1 (в этом случае как раз и начнется новый цикл вычислений); если n > 10 (это случится сразу же при n = 11), прекратить вычисления, результат из ячейки Я5 (там находится последняя сумма всех предыдущих членов ряда, включая 1/10) направить в устройство вывода информации.
На Р-167 показаны первые три цикла вычислений и самый последний цикл, когда знаменатель дроби, постепенно увеличиваясь, достигает 11. Как видите, порядок действий машины очень прост: выполняя деление, она находит очередной член ряда 1/n прибавляет его к сумме всех предыдущих членов ряда, затем находит новый знаменатель n + 1, затем опять находит новый член 1/(n + 1), опять прибавляет его к предыдущей сумме, опять вычисляет новый знаменатель (n + 1) + 1 и т. д. И всякий раз машина проверяет, а не стало ли очередное n больше 10, дальше которого считать не велено.
Найти сумму ряда до n = 10 несложно, буквально за несколько минут это можно сделать и «вручную». Но вот досчитать сумму ряда до n = 100 или тем более до n = 1000 не так-то просто, на это понадобились бы уже не минуты, а часы. А для машины посчитать наш ряд, например до n = 1000, просто пустяк.
Решая такую простейшую задачу, машина сама по заданной программе проведет довольно большой объем работ, проделав в общей сложности 4000 основных операций (1000 делений, 2000 сложений, 1000 сравнений) и массу вспомогательных. И на все это даже у очень небольшой современной ЭВМ ушли бы какие-то доли секунды. Вот что такое автоматизация вычислений, путь к которой открыли нам электронные схемы — сумматор и другие схемы процессора, быстродействующие коммутаторы, дешифраторы, устройства памяти.
Уже говорилось, что возможности ЭВМ во многом определяются объемом ее оперативной памяти (Т-277). Другая важнейшая характеристика компьютера — быстродействие. Еще, кажется, совсем недавно рекордом было несколько тысяч операций в секунду, а сегодня даже небольшая настольная ЭВМ выполняет в секунду 200–300 тысяч операций, средняя машина — несколько миллионов, а крупные суперЭВМ — сотни миллионов. Дело подходит к скорости счета миллиард операций в секунду. На машинах с высоким быстродействием можно одновременно решать десятки разных задач — каждый вычислитель или, как обычно говорят, пользователь, работает со своего пульта, своего терминала (дисплей, клавиатура, дисковод). Машина решает задачи по частям, молниеносно переключаясь с одной задачи на другую, так, что никто из пользователей и не замечает, что он не один.
Но главное, для чего нужно высокое быстродействие, — это решение очень сложных задач, быстрая обработка больших массивов информации. Так, например, точность прогнозов погоды на 5-10 дней вперед заметно возрастает, если увеличить объем перерабатываемой информации о температуре, ветрах, давлении, влажности и т. п., которую по нескольку раз в сутки собирают во многих тысячах точек земного шара. Без ЭВМ, вручную, такие задачи вообще нет смысла решать — прогноз на 10 дней вперед придется рассчитывать несколько месяцев. Даже нынешние быстродействующие компьютеры не успевают переработать всю информацию, какую хотели бы метеорологи.
Высокое быстродействие нужно для решения сложных научных и технических задач. Например, для того, чтобы описать поведение плазмы в будущем термоядерном реакторе. Или за разумное время рассчитать, детально проанализировать несколько вариантов большого железнодорожного моста и выбрать лучший из них. Или оперативно и детально моделировать процессы в больших экономических системах.
Принцип построения нашей учебной программы (Р-167) примерно тот же, какой был на заре программирования, — это программа, как ее называют, в машинных кодах. В ней указываются конкретные адреса, говорится, откуда взять число и куда направить, называются конкретные арифметические действия, которые нужно поочередно выполнять.
По мере усложнения решаемых задач такая система программирования оказалась слишком громоздкой, и появилось средство, упрощающее общение с компьютером, — языки программирования. Сейчас таких языков сотни, если не тысячи: ФОРТРАН, АЛГОЛ, БЕЙСИК, ПАСКАЛЬ, КОБОЛ, СИ, ЛИСП, ЛОГО и другие. Все это языки разные и даже совсем разные, но главная идея у них одна — в языке имеются слова, которые вводятся в машину, например, с клавиатуры; эти слова, как любые введенные в машину сочетания букв, превращаются в строго определенный код, определенные сочетания импульсов-пауз; специальная вспомогательная программа превращает слова-коды в определенную последовательность конкретных команд и адресов; эта вспомогательная программа называется транслятором, переводчиком, она переводит указания, которые вы даете компьютеру на языке программирования, в указания на языке машинных кодов. Если бы наша учебная программа была написана на каком-либо языке программирования, то мы не выписывали бы по десять раз номера ячеек и все последовательности арифметических действий, а изложили бы общую схему вычислений, приписав в конце: «Если n > 10, прекратить вычисления и отпечатать результат, если n =< 10, вновь перейти к первому действию». В языках программирования пишут, правда, намного короче и в большинстве английскими словами или сокращениями: «GO ТО A» — «перейти к действию А», «IF n> 10 THEN В» — «если n> 10, перейти к действию В», «PRINT SQR 100» — «извлечь квадратный корень из 100 и отпечатать результат», «DEL N5-N8» — «удалить из записи весь текст от 5-й строки до 8-й строки» и т. д.
Язык программирования и компьютер — это не есть нечто независимое, существующее каждый сам по себе. Машины ориентируются на определенный язык или максимум на класс языков, для каждого из которых должен быть свой транслятор или интерпретатор — программа перехода с одного языка на другой. В принципе же различают две стратегии, два подхода к взаимодействию машины с программой, а значит, с пользователем. В пакетном режиме машина получает отлаженную программу и сама доводит вычисления до конца. Другой режим — диалоговый, когда, решая задачу по частям, машина не только выполняет ваши указания, но и обращает внимание на ошибки или неудачные действия, задает уточняющие вопросы, предлагает варианты дальнейших действий. Именно в таком режиме работает ПК, персональные компьютеры, применительно к которым и появился термин «дружественное программирование». Общение с ПК может начинаться при самых начальных знаниях языка программирования. Можно использовать ПК как справочник, деловой календарь или большую записную книжку, с его помощью можно редактировать тексты, из табличных данных получать многоцветные графики и при этом, изменив какую-либо величину, мгновенно видеть, как из-за этого изменяются все другие, связанные с ней. Уже миллионы людей на собственном опыте почувствовали, как много рутинной, черновой работы берет на себя ПК и как просто и легко он находит точное наивыгоднейшее решение там, где раньше прикидывали на глазок. Нельзя, конечно, разбрасываться торжественным словом «мыслить», но то, что делают современные ЭВМ, даже небольшие, позволяет называть их думающими машинами. Но, конечно, ЭВМ — это всего лишь машина. Общаясь с ПК на разговорном языке, мы, как уже упоминалось, всего лишь вводим в него слова, закодированные наборами двоичных цифр. При этом компьютер требует абсолютной четкости, он не додумает, не догадается, что вы имели в виду, если что-то сказано нечетко. Вплоть до того, что, если, набирая свой вопрос, вы сделаете лишний пробел между словами, машина вас не поймет и, скорее всего, попросит повторить вопрос.
Программирование в минимальных дозах, особенно для работы с ПК, доступно каждому человеку. И в то же время программирование — это большая наука и большое искусство, от него во многом зависит, что может сделать данный класс ЭВМ. Это можно увидеть даже на нашем простейшем примере для суммирования последовательности 1/1 + 1/2 + 1/3… В программе для этой задачи можно было написать, чтобы машина сначала нашла все дроби, все слагаемые ряда, а потом начала их складывать. Но при этом в памяти пришлось бы занять уйму ячеек, в то время как, работая по первой нашей программе, машина занимает всего 9 ячеек памяти. Зачастую от программиста зависит не только экономичность и быстрота решения задачи, но и вообще сама возможность такого решения.
Цифровые электронные вычислительные машины в большинстве своем универсальны; они строят цифровые, математические модели, в которых можно отобразить самые разные процессы — от борьбы с микробами до рождения новых звезд. Решают машины и простые житейские задачи, связанные с классификацией или поиском информации в больших ее массивах. Можно, например, ввести в память машины, записать на магнитную пленку, данные нескольких тысяч деталей, а потом в нужный момент по определенному запросу мгновенно получить от машины нужную классификацию. Скажем, перечень