Главная  Длительная эволюция 

[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [ 57 ] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86]

СИМВОЛ г имеет значение 5. В „Математике" имеется функция, которая позволяет пользователю локализовать вспомогательные выражения так, что, несмотря на совпадение вспомогательных переменных с символами, значения которых были ранее определены, это не приводит к нарушениям в работе программы. Аналогично, после выполнения программы такие символы имеют те же значения, что они имели раньше. Таким программным средством локализации является функция Module.

Функция Module имеет два аргумента. Первый есть список локальных переменных, второй - исполняемая программа:

Module[{x,y,...}, ехрг]

Локальным переменным списка, всем или их части, можно присвоить начальные значения, т.е. задавать выражения с заголовком Module в виде

Module[{x = хО,у,...},ехрг]

Значением функции Module является вычисленное ехрг.

Механизмом локализации является создание временных вспомогательных переменных вида х$п, где п есть значение системной переменной $ Module Number. Значение этой переменной увеличивается на единицу всякий раз, когда происходит вычисление любой функции с заголовком Module.

Table[Module[{t},t],{i,3}] {i$l, <$2, Ш}

Символы вида i$n снабжаются атрибутом Temporary, который предписывает „Математике" удалять символы, которые не были экспортированы в выходные ячейки, после окончания вычисления функции Module.



Упражнения 175

Module[{t},Print[t]]

т ?t.

f$l,f$2,t$3

Из сказанного выше следует, что при определении, например, функции bisect нам следовало бы воспользоваться функцией Module.

bisect[f ,a ,b ,eps ] := Module[{z, u, v, w,t = a,s = b}, If[N[f[a]f[b]] > 0,z="a,b are not good", While[Max[N[f[t]],N[f[s]]] > eps, u = N[f [t]]; v = N[f[s]]; w = N[f[(t -I- s)/2]]; If[uw >= 0,t = (t -- s)/2]; If[vw > 0,8 = (t -f- s)/2]; z = N[t]; z]

Упражнения

1. С помоио>ю функции Do напишите программу fact[ n ] вычисления n! для натуральных п. Предусмотрите, чтобы при аргументе, не являющемся натуральным числом, было напечатано соответствующее сообщение. В программе используйте функцию Module.

2. Числа Фибоначчи /„ определяются с помощью рекуррентного соотношения /п = /п-1 + fn-2- Напишите программу flb[ п -] их вычисления с помощью функции Do. Предусмотрите те же проверки аргумента, что и в предыдущем упражнении. Сравните время вычисления flb[100] по написанной программе с временем программ в стиле правил преобразований я в стиле динамического программирования.

3. Встроенная функция Prime[n] имеет значением п-е по номеру простое число. Используя функцию While, напишите программу, определяющую число простых чисел, меньших или равных п.

4. Напишите программу cntpXist], которая по заданному списку I порождает новый список, элементами которого являются пары. Первыми элементами пар служат все различные элементы списка I, вторыми - число их вхождений в I. Используйте функции For, Do и Module.



В следующих задачах не требуется, чтобы обязательно использовался процедурный стиль программирования. Единственное требование: наличие функции Module.

5. Определите функцию changeto, первым аргументом которой является натуральное число п, вторым аргументом - список натуральных чисел. В результате вычисления этой функции должен быть создан список способов размена суммы в п рублей на купюры достоинством, равным числам из второго списка.

6. (Латинские квадраты). Латинским квадратом называется квадратная п хп матрица, элементами которой являются натуральные числа от 1 до n и удовлетворяющая условию: ни в одной строке и ни в одном столбце не должно быть повторяющихся чисел. Определите функцию latinsquarefn Integer?Po8itive], которгш порождала бы случайным образом латинский п х п квадрат.

7. Два латинских квадрата Р viQ называются ортогональными, если среди пар {Pij,Qi]) матричных элементов нет одинаковых. Напишите программу orthQ проверки латинских квадратов на ортогональность. Найдите, используя функцию latinsquare, ортогональные квадраты четвертого и пятого порядков (в шестом порядке таковых нет).



[0] [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [ 57 ] [58] [59] [60] [61] [62] [63] [64] [65] [66] [67] [68] [69] [70] [71] [72] [73] [74] [75] [76] [77] [78] [79] [80] [81] [82] [83] [84] [85] [86]

0.0008