Материал: 1-23

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

„„UT.O

/у Іі і " %

ммшІ, WA 0 Т.П. Караванова

ББК 32.81я721 К21

Схвалено комісією з інформатики Навчально-методичної ради з питань освіти Міністерства освіти і науки України (лист №1.4/18-1450 від 22.06.2007р.)

Р е ц е н з е н т и :

Тимофієва Є.М. - канд. фіз.-мат. наук, доцент Чернівецького національного університету імені Юрія Федьковича;

Мельник В.І. — учитель інформатики Ліцею інформаційних технологій м. Олександрії, заслужений учитель України

Караванова, Т.П.

К21 Інформатика : методи побудови алгоритмів та їх ана­ ліз : обчисл. алгоритми : навч. посіб. для 9-10 кл . з поглибл. вивч. інформатики / Т.П. Караванова. - К. : Генеза, 2009. - 336 с. : іл. - Бібліогр.: с. 331.

ISBN 978-966-504-731-5.

Навчальний посібник містить достатньо повний об'єм мате­ ріалу, необхідний для оволодіння навичками побудови алго­ ритмів різного рівня складності, оптимізації методів їх розробки, оцінки ефективності виконання алгоритмів, вироблення нави­ чок тестування програм, що реалізують розроблені алгоритми. У посібнику розглянуто питання оптимізації алгоритмів з вико­ ристанням елементів комбінаторики, теорії графів, лінійного та динамічного програмування, обчислювальної геометрії, алгебра­ їчних методів розв'язування алгоритмічних задач.

Цей навчальний посібник може бути корисний як при ви­ вченні алгоритмізації у шкільному курсі з поглибленим вивчен­ ням інформатики, так і при підготовці учнів інших навчальних закладів до олімпіад, турнірів, конкурсів з інформатики.

Посібник призначений для широкого кола читачів, учителів, а також для учнів, що вивчають інформатику за поглибленою програмою, учнів старших класів загальноосвітніх навчальних закладів, які готуються до олімпіад, конкурсів, турнірів з інфор­ матики, для студентів училищ, технікумів, середніх спеціаль­ них навчальних закладів та ВНЗ.

Рекомендується також як навчальний посібник для само­ стійного вивчення.

 

ББК 32.81я721

 

©Караванова Т.П., 2007

ISBN 978-966-504-731-5

©Видавництво «Генеза»,'

оригінал-макет, 2009

ВІД АВТОРА

Даний навчальний посібник є логічним продовженням посібника «Методи побудови алгоритмів та їх аналіз. Необчислювальні алгоритми». Після ознайомлення з різноманітними алгоритмами, які можна назвати базовими для побудови складних алгоритмів, слід переходити до побудови оптимізаційних алгоритмів.

Володіючи базовими алгоритмічними структурами - ліній­ ними, розгалуженими і циклічними, можна побудувати алго­ ритм розв'язку практично будь-якої задачі. Розв'язання склад­ них алгоритмічних задач, метою яких є пошук кращого з усіх можливих варіантів розв'язків, може бути реалізовано за допо­ могою повнопереборних алгоритмів. Однак існують різні мето­ ди, які дають змогу оптимізувати такі задачі і розв'язати їх за мінімальний час. Методи розв'язування таких задач представ­ лені в інформатиці різними розділами: теорія графів, лінійне та динамічне програмування тощо.

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

Аналіз значної кількості робіт відомих авторів, присвяче­ них питанням вивчення методів розв'язування складних алго­ ритмічних задач, дав мені змогу підійти до розгляду методів побудови алгоритмів з різних точок зору і розташувати ма­ теріал у найбільш логічній і зручній послідовності.

Оскільки даний навчальний посібник у першу чергу орієнто­ вано на учнів загальноосвітніх навчальних закладів і молод­ ших курсів вищих навчальних закладів, то його матеріал мак­ симально адаптований саме для цієї вікової категорії читачів.

До посібника увійшли не тільки теми, передбачені програ­ мою поглибленого вивчення інформатики, а й матеріал, не­ обхідний для підготовки до олімпіад, турнірів, конкурсів тощо.

Достатній досвід роботи з учнями Чернівецького міського ліцею № 1, робота з обдарованими дітьми під час підготовки до різного рівня олімпіад з інформатики дають підстави сподіва­ тися, що даний навчальний посібник буде корисним учителям, тренерам та їхнім учням.

Тетяна Караванова

З

РозділІ

9 0 1 ) 0 1 1 : 0 10

 

10 0 1

0 111

10 1 1 1 0 0

0 1

о о о o l i o і

 

10

10 0

10 1

В 01

10 10 0 1

0

0 1 1 1 0 11

10 11

о

о і

о с а

 

і

. 1

0

 

 

і

АЛГОРИТМИ ДЛЯ РОБОТИ З ДОВГИМИ ЧИСЛАМИ

Дані алгоритми мають коротку і влучну назву - довга ариф­ метика. Про що йдеться? Ми вже розглядали питання обмеже­ ності значень різних типів даних і наводили приклад обчислен­ ня значень га! для га > 7 у разі, коли результат описано як цілу змінну. При цьому матимемо неправильну відповідь. І все це тому, що значення 8! = 40 320, а тип integer має верхню межу значень 32 767. Під час обчислення відповіді для га = 8 за допо­ могою простенької програми

program factorial; varf, і, n: integer;

begin read(n); f: = 1;

for і := 1 to n do f =f * j-

і . і i,

writeln(f)

end;

отримаємо результат -25 216, який демонструє описану ситуацію. Отже, ми вийшли за межу значень даного типу і не можемо отри­ мати правильний результат. Така ситуація може трапитися не ли­ ше під час обчислення факторіала, а, наприклад, при спробах отри­ мати значення аь при цілих, але великих значеннях аргументів.

Вихід із цієї ситуації є, якщо подати число у вигляді масиву окремих його цифр. Алгоритми довгої арифметики передба­ чають поцифрову обробку заданих чисел, а тому є циклічними. Оскільки йдеться про арифметику, то й алгоритми, які реалізу­ ються над довгими числами, - це алгоритми додавання, віднімання, множення та ділення. І ще одна умова - розгляда­ тимемо лише цілочислову арифметику.

Отже, нам потрібно буде реалізувати алгоритми виконання арифметичних дій над числами, що подані у вигляді масивів цифр. Розглядаючи системи числення, ми раніше реалізовува­ ли ці алгоритми для систем числення з основами Р. Нагадаємо їх та дещо модифікуємо.

Розглянемо ті арифметичні дії, які найчастіше трапляються в задачах, а саме: додавання, віднімання і множення.

Додавання довгих цілих чисел

Нехай задано масиви At, Вр і = 1, 2, ..., п, елементами яких є цифри 10-ї системи числення. Розробимо алгоритм додавання цих двох довгих чисел. Для цього необхідно порозрядно дода­ вати цифри двох чисел і контролювати отриманий результат: якщо він менший за 10, то це і є наступна цифра числа-ре- зультату; якщо ні, то необхідно відокремити цифри одиниць і десятків отриманого результату і продовжити додавання на­ ступних розрядів.

Запишемо у словесній формі алгоритм додавання у стовпчик двох десяткових чисел.

1.Нехай п - кількість цифр у першому числі, а т - у друго­ му. Тоді визначимо k = max(n, т).

2.Визначити і := 1, с := 0 (с - кількість десятків у додаванні попереднього розряду).

3.Нехай аі - і-та цифра першого доданка, bt - другого, а rezi - результату. Визначити с := at + bt + с.

4.Якщо с < 10, тоді визначити rezi := с і перейти до п. 6.

5.Якщо с > 10, тоді визначити значення і-го розряду числа-

результату як rezt := <кількість одиниць числа с> , а значення, яке необхідно буде додати у наступному розряді, - як с := к і л ь ­ кість десятків числа с > .

6.Якщо і < k, то і := і + 1 та перейти до п. 3.

7.Якщо с > 0, то k := k + 1, rezk := с, що означатиме збіль­ шення розрядності числа-результату.

8.Вивести елементи масиву гаг.

Реалізуємо фрагмент цього алгоритму (п. 1-6) у вигляді про­ цедури:

procedure add(var a: mas; b: mas; var k: word); var i: word;

begin

if n > m t h e n k := n e l s e k := m; {Визначення максимальної довжини двох чисел.}

с:=0;

for і := 1 to k do

b e g i n

 

{Визначення суми цифр поточного розряду}

С := а[і] + Ь[і] + с;

 

{і десятків попереднього.}

а [І] := С m o d 10;

{Кількість одиниць є поточною цифрою результату,}

С := c d i v 10 {а кількість десятків запам'ятаємо для наступного додавання.}

e n d ;

 

 

{Якщо після останнього}

if с <> 0 then begin inc(k); a[k] := c end;

{додавання кількість}

e n d ;

{десятків не нульова, то збільшуємо розрядність числа-результату.}

5

Источник: https://studfile.net/preview/14502485/