Короткий посібник з Maple

Конструкціяelifthenможе повторюватися кілька разів або бути відсутнім. Частинаelseтеж не є обов'язковою. Часто замість складеного оператора розгалуження буває зручніше використовувати функцію розгалуження -`if `. Вона має три аргументи, перший з яких є умовою, а другий і третій - значеннями, що повертаються. Якщо перший аргумент набуває значення true, то значенням функції, що повертається, є другий аргумент, а якщо false - третій. Наведемо приклад використання функції`if `:

значення

У Maple існує кілька різновидів циклів. Стандартний арифметичний цикл має таку структуру:forfrombytodood; Тут група командblockвиконується для кожного значення змінної циклуvar, яка змінюється від значенняexp1до значенняexp3з крокомexp2.Якщо конструкціяfromта/абоbyвідсутня, то відповідні їм вирази приймаються рівними 1. Зазначимо, що змінна циклу може змінювати своє значення не тільки при переході до наступний крок циклу, але і всередині тіла циклу. Проілюструємо це з прикладу:

>for i from 1 by 1 to 10 do i:=i+3 od;

Ітераційний цикл має структуру:whiledood; Можливий і "гібрид" арифметичного та ітераційного циклів. Відповідна конструкція має вигляд:forfrombywhiledood;

Розглянуті варіанти організації циклів характерні (з тими чи іншими змінами) більшість мов програмування. Крім них, у Maple є ще один специфічний вид циклу. Як згадувалося, висловлювання в Maple мають структуру дерева. Перебрати всі гілки (операнди) першого рівня можна здопомогою спеціального циклу, що має такий синтаксис:forindood; Проілюструємо роботу цього циклу на прикладах:

>for g у expand(f) do g od;

>s:=0:for i in numtheory[divisors](60) do if numtheory[mobius](i)=1 then s:=s+i fi od;s;

В останньому прикладі ми знайшли суму тих дільників числа 60, значення функції Мебіуса від яких дорівнює 1.

Як ілюстрацію використання циклів і умовних операторів вирішимо таке завдання: знайти всі пари простих чисел близнюків (так називають прості числа, що відрізняються один від одного на 2) на відрізку натурального ряду чисел від 8000 до 9000.

8009, 8011 8087, 8089 8219, 8221 8231, 8233 8291, 8293 8387, 8389 8429, 8431 8537, 8537 8599 8627, 8629 8819, 8821 8837, 8839 8861, 8863 8969, 8971

Зверніть увагу на те, що перед початком обчислень ми надали значення 0 зарезервованої змінноїprintlevel. Справа в тому, що на команди, що викликаються із вкладених структур, не поширюється правило регулювання виведення результатів виконання команди на екран за допомогою приміщення крапки з комою або двокрапки після відповідної команди. В цьому випадку відображаються результати виконання всіх команд, глибина вкладеності яких не перевищує поточного значення зарезервованої змінноїprintlevel. Це робиться для того, щоб програма не друкувала надто багато проміжних результатів. Якщо ми все ж таки хочемо вивести на екран результати, одержувані на глибині вкладеності, що перевищує значенняprintlevel, достатньо використовувати операторprint. За замовчуванням значенняprintlevelдорівнює 1. (Саме цим пояснюється, що у прикладі, де ми обчислювали суму частини дільників числа60, на екрані не були відображені результати присвоювань s:=s+i)

Волгоградський державний педагогічний університет Кафедра алгебри, геометрії та інформатики