MathCAD


         

Рис. 6.6. Решение буквенной головоломки USA+USSR=PEACE (иллюстрация цикла с параметром)


Программа на рис. 6.6 решает буквенную головоломку USA+USSR=PEACE, где требуется указать, какие цифры скрываются за буквами. В программе три цикла с параметром (A, C и S), которые вложены друг в друга. В программе, не мудрствуя лукаво, можно было записать все семь циклов – по числу неизвестных задачи U, S, A, R, P, E и C. Но тогда перебор (а именно этим способом решается наша головоломка – вспомним «извращения» этюда 3) длился бы нестерпимо долго. Несложный предварительный анализ условий задачи (U ¬ 9, Р ¬ 1, Е ¬ 0 и R ¬ 10 + A) сокращает число циклов до трех и делает время счета приемлемым. Один из основных недостатков языка Mathcad – это невозможность вывода на дисплей промежуточных результатов расчета. А они не только помогают отлаживать программы, но и в ряде случаев просто необходимы при поиске единственно правильного решения из множества возможных (см., например, программы на рис. 6. 34 и 35 с решением задачи о компьютерах). В Mathcad-программах допустима запись вариантов ответов (промежуточных результатов) в матрицу (в вектор), которую после выполнения программы можно просмотреть, что и сделано на рис. 6.6. При этом в матрицу M записываются не только значения числовых переменных, но и текстовые константы[13]

(“+”, “=” и др.), делающие ответ более читабельным. Правильный ответ хранится в первом столбце матрицы M. Вернее, в первой строке – матрица у нас транспонируется для большей компактности[14]. Остальные ответы неверны – там разным буквам соответствуют одинаковые числа.

Цикл с параметром в среде Mathcad более гибок, чем его аналоги в языках BASIC или Pascal. Вот еще варианты заголовков циклов с параметром в среде Mathcad, кроме тех, которые показаны на рис. 6.6 (там специально приведены разные варианты заголовков циклов):

for A Î V        (V – вектор)

for A Î 5, 4.7, 8.9, 7.3×10-5

for i Î i1.. i2.

Последний вариант примечателен тем, что переменные i1 и i2 могут принимать любые значения, и необязательно, чтобы i1 было меньше i2. В языках BASIC и Pascal разное соотношение между i1 и i2 требует различного синтаксиса заголовка цикла с параметром:




Содержание  Назад  Вперед