- •Р.М.Літнарович, ю.Г.Лотюк комп’ютерна алгебра навчально-методичний посібник
- •© Літнарович р.М., Лотюк ю.Г.,2010 р.
- •1. Програма нормативної дисципліни
- •2. Мета та завдання дисципліни,
- •3. Формування практичних навичків
- •4. Зміст дисципліни
- •4.1.Лекції, найменування тем за їх змістом
- •6.Перелік питань до заліку
- •7.Науково-дослідна робота студентів
- •8. Літературні джерела
- •9.Розподіл балів за один змістовий модуль, присвоюваних студентам
- •10.Шкала оцінювання:
- •11.Зміни та доповнення ,внесені в робочу програму на 201__ рік
- •12.Оцінка навчальної діяльності студента
- •2. Лекційний курс Лекція 1. (2 год.)
- •1.1 Коротка характеристика gap
- •1.2 Можливості для роботи з різними видами об'єктів алгебри
- •1.3 Приклади простих обчислень
- •2 Мова програмування gap
- •2.1 Символи і категорії слів в gap
- •2.2 Ключові слова
- •2.3 Ідентифікатори
- •2.4 Вирази
- •2.5 Звернення до функцій
- •2.6 Порівняння виразів
- •2.7 Арифметичні оператори
- •2.8 Привласнення
- •2.9 Виклик процедури
- •2.10 Команда if
- •2.11 Цикл while
- •2.12 Цикл repeat
- •2.13 Цикл for
- •2.14 Функції
- •3 Структури даних
- •3.1 Константи і оператори
- •3.2 Змінні і привласнення
- •3.3 Функції
- •3.4 Списки
- •3.5 Тотожність і рівність списків
- •3.6 Множини
- •3.7 Вектори і матриці
- •3.8 Записи
- •3.9 Арифметичні прогресії
- •3.10 Використання циклів
- •3.11 Подальші операції із списками
- •3.12 Функції
- •4 Операції над групами і їх елементами
- •4.1 Завдання групи підстановок
- •4.2 Завдання підгрупи групи підстановок
- •4.3 Прості властивості групи. Силовськие підгрупи.
- •4.4 Інші види підгруп
- •4.5 Факторгруппи
- •Список літератури, що рекомендується
- •Додаток а Рекомендації по створенню і запуску програм в системі gap
- •1. Створюємо за допомогою текстового редактора файл "prog.G" наступного змісту:
- •2. Зберігаємо цей файл в каталозі, вибраному з урахуванням рекомендацій параграфа 1.2.
- •3. Запустимо gap і визначимо файл протоколу log.Txt:
- •Лабораторна робота № 1. Основи роботи з системою gap в Windows
- •Лабораторна робота № 2 Списки. Цілі числа
- •Завдання для лабораторної роботи № 2
- •Лабораторна робота № 3. Лінійні програми. Вектори і матриці
- •Завдання для лабораторної роботи № 3
- •Лабораторна робота № 4. Програми, що гілкуються. Многочлени
- •Лабораторна робота № 5. Циклічні програми (цикл for). Бінарні відносини
- •Лабораторна робота № 6. Циклічні програми (цикл while). Підстановки
- •Лабораторна робота № 7. Циклічні програми (цикл repeat). Групи підстановок
- •Завдання для лабораторної роботи № 7
- •Лабораторна робота № 8. Вивчення властивостей елементів групи
- •Завдання для лабораторної роботи № 7
- •Лабораторна робота № 9. Вивчення властивостей підгруп групи.
- •Завдання для лабораторної роботи № 9.
- •Лабораторна робота № 10. Робота з бібліотекою кінцевих груп
- •Додаткові завдання
- •33027 Рівне , Україна
2.12 Цикл repeat
Формат:
repeat statements until bool-expr;
Послідовність команд statements виконується, поки істинна умова bool-expr. При цьому спочатку виконуються команди, а потім перевіряється умова. Таким чином, при будь-якому початковому значенні умови набір команд statements виконається, принаймні, один раз.
Приклад (обчислення найменшої суми квадратів перших n послідовних натуральних чисел, що перевищує 200):
gap> i := 0;; s := 0;; gap> repeat > i := i + 1; s := s + i^2; > until s > 200; gap> s; 204
2.13 Цикл for
Формати:
for simple-var in list-expr do statements od; for variable in iterator do statements od; for variable in object do statements od;
У першому варіанті послідовність команд statements виконується для кожного елементу із списку list-expr. Цикл for еквівалентний циклу while:
loop-list := list; loop-index:= 1; while loop-index <= Length(loop-list) do variable := loop-list[loop-index]; ... statements ... loop-index := loop-index+1; od;
Список list часто є послідовністю. Команда
for variable in [from..to] do statements od;
відповідає поширеній в інших мовах команді
for variable from from to to do statements od;
Приклад:
gap> s := 0;; gap> for i in [1..100] do > s := s + i; > od; gap> s; 5050
У наступному прикладі зміна списку приводить до виконання команд для нових його елементів:
gap> l := [ 1, 2, 3, 4, 5, 6 ];; gap> for i in l do > Print( i " " ); > if i mod 2 = 0 then Add( l, 3*i/2 ); fi; > od; Print( "\n" ); 1 2 3 4 5 6 3 6 9 9 gap> l; [ 1, 2, 3, 4, 5, 6, 3, 6, 9, 9 ]
А в наступному - не приводить:
gap> l := [ 1, 2, 3, 4, 5, 6 ];; gap> for i in l do > Print( i " " ); > l := []; > od; Print( "\n" ); 1 2 3 4 5 6 gap> l; [ ]
Тепер розглянемо два варіанти циклу FOR, що залишилися:
for variable in iterator do statements od; for variable in object do statements od;
Для цього необхідно спочатку ввести деякі поняття, що характеризують об'єкти, з якими працює GAP.
Кожен об'єкт має свій тип. Тип об'єкту - це інформація, яка використовується для того, щоб вирішити, чи застосовна до об'єкту дана операція, і, для вибору методу її застосування у разі позитивної відповіді. Наприклад, тип двох об'єктів визначає, чи можуть вони бути помножені один на одного, і якщо так, то яким способом. Аналогічно, тип об'єкту визначає, чи може бути обчислений порядок (розмір) цього об'єкту, і якщо так, то як.
Тип об'єкту складається з двох основних частин, що характеризують різні аспекти об'єкту, а саме з сімейства, до якого він належить, і з набору фільтрів.
Сімейство визначає відношення даного об'єкту до інших об'єктів. Наприклад, сімейство утворюють всі підстановки. Інший приклад сімейства - сімейство всіх колекцій (collections), підстановок. Останнє сімейство містить безліч всіх груп підстановок як підмножина. Третій приклад - сімейство всіх раціональних функцій з коефіцієнтами з деякого сімейства.
Фільтр можна описати як послідовність true і false, що характеризує відповідні параметри даного типу об'єктів (наприклад, Isabelian, Isprime, Isgroup і тому подібне). Хоча при виборі методу фільтри не розрізняються по їх походженню і застосуванню, їх можна класифікувати (з невеликими виключеннями) на категорії, уявлення, властивості, а також тестери атрибутів.
Набор елементів, лежачих в одному сімействі, називається колекцією. Прикладами колекцій є однорідні списки, а також домени (domain) - так в GAP називаються множини з додатковою структурою, наприклад, група, клас зв'язаних елементів, векторний простір і так далі
Хай тепер C - колекція. Тоді ітератор Iterator(C) дозволяє організувати перебір всіх елементів цієї колекції без повторень. В цьому випадку цикл FOR еквівалентний наступному циклу:
while not Isdoneiterator(iterator) do variable := Nextiterator(iterator) statements od;
Якщо ж D - домен, то результат виконання циклу вигляду
for variable in domain do
має бути таким же, як результат виконання циклу вигляду
for variable in Aslist(D) do
Якщо в циклі FOR об'єкт object не є списком або ітератором, то обчислюватиметься Iterator(object). Якщо це обчислення буде успішним, то буде реалізований перебір по ітератору.
gap> g := Group((1,2,3,4,5),(1,2)(3,4)(5,6)); Group([ (1,2,3,4,5), (1,2)(3,4)(5,6) ]) gap> count := 0;; sumord := 0;; gap> for x in g do > count := count + 1; sumord := sumord + Order(x); od; gap> count; 120 gap> sumord; 471
Така конструкція використовує набагато менше пам'яті, оскільки ітератор може бути набагато компактнішим, ніж список всіх елементів.
З циклу FOR можна вийти до його виконання, використовуючи оператора break. Це особливо ефективно в комбінації з циклом по ітератору, наприклад, для пошуку елементу з потрібною властивістю в деякому домені. Цей оператор може бути використаний тільки усередині циклу.gap> g := Group((1,2,3,4,5),(1,2)(3,4)(5,6)); Group([ (1,2,3,4,5), (1,2)(3,4)(5,6) ]) gap> for x in g do > if Order(x)= 3 then > break; > fi; od; gap> x; (1,4,3)(2,6,5)
Оператора continue відміняє виконання частини циклу, що залишилася, і переходить відразу у виконанню следющей ітерації. Цей оператор також може бути використаний тільки усередині циклу.
gap> g := Group((1,2,3),(1,2)); Group([ (1,2,3), (1,2) ]) gap> for x in g do > if Order(x)= 3 then > continue; > fi; Print(x,"\n"); od; () (2,3) (1,3) (1,2)