Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
3.doc
Скачиваний:
2
Добавлен:
30.04.2019
Размер:
262.66 Кб
Скачать

Посібник до виконаяня лабораторних робіт по курсу дискретної математики

3.2. Максимальний елемент послідовності

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

Уявіть. що ви стоїте біля початку довгого столу, на якому рядочком лежать чудові яблука. Вам дозволено взяти собі одне. Яке? Звичайно ж найбільше! Як його знайти, якщо кінця столу і яблук , які лежать там. добре не видно? Беріть до рук перше, яке вам сподобалось і гайда вздовж столу: якщо знайдеться більше, то заміняєте!

Приблизно так само можна сформулювати алгоритм відшукування найбільшого серед чисел а1, а2,...аn. Для зберігання найбільшого значення використаємо найбільшу змінну. Назвемо її, наприклад, b. Початковим значенням для b може бути значення будь-якого члена послідовності, проте найзручніше вибрати перший. Далі перебираємо усі інші аі (з другого по n-ий) і перевіряємо, чи не знайдеться елемент, значення якого більше за b. Якщо так, то про старе значення b можна забути, а замість нього запам'ятати знайдене і продовжити порівняння. Операторами мови Pascal це можна записати так:

b:=а[і] ;

for i:=2 to n do if a[i]>b then b:=a[i];

Чи обов'язково початковим значенням для b має бути а1? Ні. Можна шукати найбільший елемент і так:

b: =а[n] ;

for і : =1 to n-1 do if а [і] >b then b: =а [і] ;

або взяти за початкове будь-яке інше значення аi, проте тоді параметр циклу мав би змінюватись від 1 до n.

Чи можна схожим чином шукати найменший елемент послідовнос­ті? Звичайно! Для цього достатньо змінити в умові знак «>» на знак «<».

Чи можна цей алгоритм пристосувати для розв'язування складні­шої задачі: знайти не тільки значення, але й номер найбільшого члена послідовності? Так. Для цього необхідно кожного разу, коли ми запам'ятовуємо якесь значення аi в змінній b, запам'ятовувати і його номер і (наприклад, у змінній k):

b:=а[i] ; к:=1;

for і:=2 to n do

if a[i]>b then begin b:=a[i]; k:=i end;

Послідовність {аi} може містити однакові значення, тому може статись так, що найбільше значення не буде єдиним. Номер якого з них знайде описаний алгоритм? Зміна значень b і k відбудеться тільки тоді, коли аi>b, і не відбудеться, коли аi =b. Тому, очевидно, змінна k міститиме номер першого за порядком найбільшого елемента. З метою отримання номера останнього найбільшого елемента можна почати перегляд послідовності з кінця або в умові замінити знак «>» на «≥».

Задача 14. Дано дійсні a1, a2, ..., a50. Замінити місцями перший і максимальний члени послідовності, надрукувати

перетворену послідовність.

Ми вже майже все вміємо робити для розв'язання цієї задачі: завантажувати дані в елементи масиву, знаходити значення і номер найбільшого. Залишилось тільки відповісти на запитання, як замінити місцями значення двох змінних а і b? Оператор а:=b чи b:=а одразу ж витре значення однієї зі змінних, тому для здійснення обміну використовують третю змінну с:

c:=а; {тимчасово зберегли значення а б змінній с}

а:=b; {значення Ь уже на своєму новому місці}

b:=c; {обмін завершено}

Згідно з описаним раніше алгоритмом номер максимального елемента послідовності буде записано в змінну k. Щоб замінити місцями а1 і ak, нам у пригоді стане змінна b: вона містить копію значення аk. Остаточної отримаємо програму:

program change;

const n=50;

var a : array [1 . . n] of real; b:real;

і,k:byte;

begin write ('Введіть ',n,' чисел: ');

for і:=1 to n do read (a[i] ) ;

b:= a [i] ; k: =1 ;

for і : =2 to n do

if a[i]>b then begin b:=a[i]; k:=i end;

a [k] :=a[l] ; a [1] :=b;

writeln('Змінена послідовність:') ;

for і: =1 to n do write (a [i] : 10 : 4) ; writeln

end.

У попередній задачі ми не знали точної кількості членів заданої послідовності, тому пам'ять для неї у програмі inCircle виділяли з запасом. У програмі change кількість членів послідовності (і відповідний розмір масиву) задано константою, бо в умові задачі 14 зазначено, що їхня кількість дорівнює 50.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]