РЕАЛИЗАЦИЯ АЛГОРИТМА
Приведем в качестве примера реализацию алгоритма для нахождения наибольшего общего делителя чисел А
и В сначала на языке Пролог, затем на языке Java. Сокращение gcd означаетВ реализации на языке Пролог использованы три правила, соответствующие трем возможным случаям. Во всех случаях два первых аргумента являются числами, третий аргумент можно интерпретировать как результат. В первом правиле второй аргумент принят равным нулю. Второе правило применяется тогда, когда первый аргумент больше второго, третье правило — когда второй аргумент больше первого.
gcd (А, 0, А).
gcd (А, В, D)(А > В), (В > 0), R is A mod В, gcd(B, R, D).
gcd (А, В, D)(А < В), (А > 0), R is В mod A, gcd(A, R, D).
В реализации на языке Java также используются вышеизложенные правила. В качестве входных параметров использованы два числа А
и В, в качестве результата функция возвращает их наибольший общий делитель. Первая версия алгоритма является рекурсивной, вторая — итеративной.public static int gcd (int A, int B) {
if (B == 0) {return A;}
else if (A > B) {return gcd(B, A % B);}
else if (A < B) {return gcd(A, В % A);}
return 1;
}
public static int gcdlterative (int A, int B) {
int r = 0;
while (B > 0) {
r = A % B;
A = B;
В = r;
}
return A;
}
* * *
Однако эти алгоритмы представляют собой не элементы общего эволюционного процесса, а отдельные частные случаи. Наиболее известным средством автоматического выполнения задач было программирование ткацких станков Жаккара. В станке Жаккара узор ткани определялся с помощью перфокарт. Эти перфокарты содержали примитивные программы, которые исполнялись станком. Чарльз Бэббидж использовал перфокарты для программирования своей вычислительной машины.
С современной точки зрения эти примитивные программы были написаны на машинном языке, поэтому Ада Лавлейс считается первым в истории программистом. Однако понятие программы, хранящейся в памяти вычислительной машины, появилось значительно позже.
Несмотря на все усилия, предпринятые в 1930-е и 1940-е годы, а также написанные в этот период теоретические работы, в особенности те, что были посвящены лямбда-исчислению и машине Тьюринга, развитие алгоритмов началось лишь с появлением первых компьютеров: «Колосса», Mark I, ENIAC, EDSAC и UNIVAC. Языки программирования, с помощью которых стало возможным написание программ, хранящихся в оперативной памяти, позволили сэкономить время и уйти от взаимодействия с аппаратным обеспечением напрямую — именно так осуществлялось программирование первых компьютеров.
Программы для первых компьютеров писались в восьмеричном коде. Среди первых языков программирования, допускавших представление символов, были
Процедуры, соответствовавшие символам, хранились в памяти компьютера и вызывались системой. Эту же систему унаследовал UNIVAC. Программа, записанная на этом языке, исполнялась в 50 раз медленнее той же программы, записанной на машинном языке.