- •Р.М.Літнарович, ю.Г.Лотюк комп’ютерна алгебра навчально-методичний посібник
- •© Літнарович р.М., Лотюк ю.Г.,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 Рівне , Україна
3.5 Тотожність і рівність списків
Для вивчення способів управління складними структурами даних в GAP важливо розуміти відмінності між тотожними і рівними об'єктами. У даному розділі ця відмінність демонструється на прикладі списків. Аналогічні приклади можуть бути підібрані і для записів.
Два списки рівні (тобто оператор порівняння = повертає true) тоді і тільки тоді, коли вони мають однакову довжину і їх відповідні елементи рівні.
Приклад:
gap> numbers:= primes; [ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,,71 ] gap> numbers = primes; true
Тепер змінимо список numbers і знову порівняємо його з primes .
gap> primes[3]:= 4; 4 gap> numbers = primes; true
Виявляється, що списки numbers і primes знову рівні, а роздрукувавши список primes, ми побачимо, що primes[3]=4. Це пояснюється тим, що списки primes і numbers не тільки рівні, але і ідентичні. Ідентифікатори primes і numbers указують на один і той же список, і зміни в нім відбуваються при вказівці будь-якого з його імен. Привласнення numbers:= primes створює не новий список, а тільки нове ім'я для вже існуючого списку.
Якщо необхідно змінити список, співпадаючий за змістом з primes, так, щоб сам список primes при цьому не змінився, необхідно створити копію списку primes за допомогою функції Shallowcopy (у наступному прикладі заздалегідь відновимо старе значення primes)
gap> primes[3]:= 5; 5 gap> primes; [ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,,71 ] gap> numbers:= Shallowcopy(primes); [ 2,3,5,7,11,13,17,19,23,29,31,37,41,43,,,,,,71 ] gap> numbers = primes; true gap> numbers[3]:= 4; 4 gap> numbers = primes; false
Примітка. Єдиними об'єктами, які можуть бути змінені у такий спосіб, є списки і записи, оскільки тільки ці об'єкти в GAP можуть складатися з інших об'єктів. Наприклад, після виконання наступних команд значення i і j відповідно дорівнюватимуть 2 і 1:
gap> i:= 1;; j:= i;; i:= i+1;;
Вправа. Пояснити, що відбувається в результаті виконання команд:
gap> l:= []; [ ] gap> l:= [l]; [ [ ] ] gap> l[1]:= l;
3.6 Множини
Множинами в GAP називаються списки спеціального вигляду. Елементи множини розташовані послідовно (тобто не содржат пропусків, як, наприклад, список [2,3,5,,,,,,,,31,37,41]), впорядковані (порядок сортування GAP визначає самостійно) і зустрічаються в списку тільки один раз. Множини, як і списки, можуть містити об'єкти різних типів.
Перевірити, чи є об'єкт множиною, можна за допомогою функції Isset. Для кожного списку існує відповідна йому множина, що отримується за допомогою функції Set.
Приклад:
gap> fruits:=["apple", "strawberry", "cherry", "plum", "apple"];; gap> Isset(fruits); false gap> fruits:= Set(fruits); [ "apple", "cherry", "plum", "strawberry" ]
Відмітимо, що при цьому початковий список fruits був змінений.
Для перевірки приналежності об'єкту множині використовується оператор in. Його також можна використовувати для перевірки приналежності до списку, проте в першому випадку перевірка виконується швидше, оскільки сортування дозволяє використовувати двійковий пошук замість послідовного перебору.
gap> "apple" in fruits; true gap> "banana" in fruits; false
Додати до множини новий елемент можна за допомогою функції Addset (звернете увагу на порядок проходження елементів):
gap> Addset(fruits, "banana"); gap> fruits; ["apple", "banana", "cherry", "plum", "strawberry"] gap> Addset(fruits, "apple"); gap> fruits; # 'fruits' не змінилося ["apple", "banana", "cherry", "plum", "strawberry"]
Перетин, об'єднання і різниця множин визначаються за допомогою функцій Intersection, Union і Difference . При цьому аргументи можуть бути звичайними списками, тоді як результат завжди буде множиною.
Приклад:
gap> breakfast:= ["tea", "apple", "egg"]; [ "tea", "apple", "egg" ] gap> Intersection(breakfast, fruits); [ "apple" ] gap> Difference(breakfast,fruits); [ "egg", "tea" ]
Ті ж операції над множинами проводять функції Intersectset, Uniteset і Removeset, але вони не повертають результат, а замінюють ним перший аргумент.