Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Рішення 1.






1. А: = У

2. У: = А

Це рішення невірне, оскільки після першої ж команди привласнення значення величини А буде знищено. Друга команда привласнення привласнює величині В нове поточне значення величини А (вже рівне значенню величини В).

Рішення 2. Скористаємося допоміжною моделлю даного завдання. Хай А - це стакан з чаєм (тут " стакан" - ім'я величини, а " чай" - її значення), а В - чашка з кавою (тут чашка" – ім'я іншої величини, а " кава" - її значення). Необхідно перелити каву в стакан, а чай в чашку так, щоб напої не змішати.

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

1. Вміст стакана перелити в кухоль (кухоль: = стакан)

2. Вміст чашки перелити в стакан (стакан: = чашка)

3. Вміст кухля перелити в чашку (чашка: = кухоль)

Повертаючись до початкового завдання і вводячи допоміжну (проміжну) величину Р (такого ж типу як А і В), отримаємо правильне рішення:

1. Р: =а АБО 1. Р: =в

2. А: =в 2. У: = А

3. В: =р 3. А: = Р

Розглянута модель цього завдання - не єдино можлива. Можна, наприклад, уявити, що А і В - це книжний і платтяний шафи, що стоять в кімнаті і які необхідно поміняти місцями. Ясно, що не переставивши одну з шаф на проміжне вільне місце, завдання не вирішити. Тобто, алгоритм знову складається з тих же кроків.

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

1. поставити стілець на стіл.

2. переставити стіл (із стільцем) на необхідне місце.

3. знятий! стілець із столу, поставивши на нове місце.

Для числових величин А і В подібний алгоритм виглядав би

1. А = А + У

2. У = А - В

3. А = А - В

Моделей і, відповідно, алгоритмів рішення може бути багато. Важливо (якщо їх багато) вибрати той, який буде легко реалізувати. Простота при виборі алгоритму перший великий крок на шляху до отримання програм.

Провідні фахівці програмування рекомендують при виборі алгоритму дотримувати так званий KISS - принцип: Keep It Simple, Stupid (роби простіше, дурень!).

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

Приклад 2. Обчислити суму елементів лінійної таблиці A[N].

Рішення. Якби підсумовувалося, наприклад, п'ять чисел, то задачу можна було б вирішити однією командою привласнення:

SUM = A[1]+ A[2]+ A[3]+ А[4]+ А[5]

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

Підберемо допоміжну модель: припустимо, що ми підсумовуємо ці цифри на мікрокалькуляторі. Відзначатимемо всі наші дії;

1. ВКЛЮЧИЛИ МК (СТИРАЄМО ВМІСТ ІНДИКАТОРА)

2. НАБИРАЄМО ПЕРШЕ ЧИСЛО, НАБИРАЄМО ДРУГЕ ЧИСЛО І ДОДАЄМО ЙОГО ДО ВМІСТУ ІНДИКАТОРА, НАБИРАЄМО ТРЕТЄ ЧИСЛО І ДОДАЄМО ЙОГО ДО ВМІСТУ ІНДИКАТОРА» т.д.

Якщо через SUM позначити вміст індикатора, то виконувані дії можна записати таким чином:

SUM =0

SUM = А[1] або, що те ж саме, SUM= SUM + А[1]

SUM = SUM + А[2]

SUM = SUM + А[3] і так далі

Тепер ясно, що дії складаються з додавання чергового елементу таблиці до суми, що накопичується:

SUM = SUM + A[k], де k= 1, 2, 3... N. Весь алгоритм має вигляд:

ЯСКРАВО-ЧЕРВОНИЙ Г СУМА (ЦІЛИЙ N. ВЕЩ ТАБ А| I.: N]. ВЕЩ SUM)

АРГ N, A РЕЗ SUM НАЧ ЦІЛИЙ до

SUM =0

ДЛЯ від 1 ДО N

Почати цикл

SUM = SUM + A[k]

Кінець циклу

Кінець

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

Для реалізації цього методу на перших етапах побудови алгоритму дозволяється вживати команди, що не входять в систему команд алгоритмічної мови (або використовуваної мови програмування). У алгоритмічній мові такі команди називаються великими, в програмуванні - псевдокодом. Після поступової деталізації (уточнення) всіх крупних команд (можливо, знову за допомогою розбиття завдання на частини), отримані фрагменти алгоритму, що складаються тільки з команд алгоритмічної мови (або мови програмування), або об'єднуються в один алгоритм, або, якщо завдання громіздке, виділяється основний алгоритм і необхідна кількість допоміжних.

При виділенні кожної підзадачі необхідно формалізувати її постановку, тобто визначити " що дане", " в якому вигляді", " що знайти", " в якому вигляді повертати".

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

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

Приклад 3. Скласти алгоритм вирішення квадратного рівняння при будь-яких значеннях коефіцієнтів А, В і C.

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

Для завершення рішення поставленої задачі необхідно уточнити два псевдокоди (дві крупні команди). Оскільки алгоритми вирішення таких рівнянь можуть нам знадобитися і надалі, запишемо їх у вигляді окремих (допоміжних) алгоритмів, а в алгоритмі РІВНЯННЯ замість псевдокодів напишемо команди виклику допоміжних алгоритмів.

Складені нами алгоритми вирішення лінійного і квадратного рівнянь коректно працюватимуть при будь-яких початкових даних, оскільки виконують їх перевірку.

Оскільки допоміжні алгоритми як результат рішення задачі містять літерну змінну, то в основному алгоритмі слід ввести проміжну літерну величину, наприклад, Z і використовувати отримане повідомлення в результатах основного алгоритму. Спробуйте описати алгоритм рішення квадратного рівняння.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.