До сих пор каждая из переменных в приведенных выше программах хранила лишь одно значение. Часто бывает удобно хранить в одной переменной несколько значений. В этом случае переменная называется массивом . В программе на языке АЛГОЛ массив объявляется следующим образом.
real array a[1:100];
В данном случае мы указали, что хотим использовать эту переменную для хранения 100 различных чисел с плавающей точкой, называемых элементами массива. Для обращения к первому элементу массива используется выражение a[1], ко второму — a[2], к последнему — a[100]. Число в квадратных скобках называется индексом элемента массива.
Эта программа вычисляет квадратные корни всех чисел от 1 до 100 и сохраняет их в массиве. Затем она выводит их на экран.
Кроме того, программа показывает целочисленную переменную с именем i , которое является традиционным, поскольку это первая буква в слове integer («целое»). В первом цикле for каждому элементу массива присваивается значение квадратного корня из его индекса, во втором элементы массива выводятся на экран.
Помимо типов real и integer, АЛГОЛ предусматривает тип переменных Boolean. (Помните Джорджа Буля из главы 10?) Такая переменная может иметь только два возможных значения: true и false. Буду использовать массив булевых переменных (и почти все, что мы изучили до сих пор) в последней программе этой главы, в которой реализуется известный алгоритм нахождения простых чисел под названием «Решето Эратосфена». Эратосфен (около 276–196 до н. э.) служил главным библиотекарем в легендарной Александрийской библиотеке и сегодня широко известен благодаря вычислению точной длины окружности Земли.
Простыми являются целые числа, которые без остатка делятся только сами на себя и на 1. Первое простое число — 2 (единственное четное простое число), затем следуют 3, 5, 7, 11, 13, 17 и т. д.
Первый шаг в алгоритме Эратосфена — составление списка положительных целых чисел начиная с 2. Поскольку 2 — простое число, необходимо удалить все числа, кратные двум (все четные числа, кроме 2), а так как 3 — простое число, следует исключить все числа, кратные 3. Мы уже знаем, что 4 не является простым числом, потому что оно было вычеркнуто. Следующее простое число — 5, значит, нужно удалить все числа, кратные 5. Продолжая действовать таким способом, вы будете находить новые простые числа.
В программе для нахождения простых чисел от 2 до 10 000, написанной на языке АЛГОЛ, этот алгоритм можно реализовать, объявив булев массив с индексами от 2 до 10 000.
Первый цикл for присваивает всем элементам булева массива значение true. Таким образом, предполагается, что все числа, находящиеся в начале программы, простые. Второй цикл проверяет числа от 1 до 100 (квадратный корень из 10 000). Если число простое (a[i] имеет значение true), то вложенный цикл for задает значение false всем числам, кратным ему. Последний цикл for выводит на экран все простые числа, то есть значения i, при которых a[i] — true.
Иногда люди спорят, является ли программирование искусством или наукой. С одной стороны, существуют учебные программы в области компьютерных наук , а с другой — есть такие знаменитые книги, как « Искусство программирования » Дональда Кнута. Как писал физик Ричард Фейнман: «Информатика скорее подобна инженерному делу: нужно просто заставить что-то делать что-то».
Если попросите 100 разных людей написать программу, которая выводит на экран простые числа, получите 100 различных решений. Даже те программисты, которые используют алгоритм Эратосфена, реализуют его не так, как это сделал я. Если бы программирование действительно было наукой, не существовало бы такого множества возможных решений, а неправильные заключения были бы более очевидными. Иногда стоящая перед программистом проблема вызывает у него озарения и творческие вспышки: в этом и заключается «искусство». И все же программирование в основном сводится к проектированию и строительству, подобно процессу возведения моста.
Многие из первых программистов были учеными и инженерами, способными формулировать задачи в виде математических алгоритмов, что было необходимо при использовании языков ФОРТРАН и АЛГОЛ. Тем не менее на протяжении истории развития этой сферы осуществлялись попытки создания языков для более широкого круга пользователей.
Читать дальше
Конец ознакомительного отрывка
Купить книгу