Початковій стадії розробки ПРОГРАМИ

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

Насамперед, для чого потрібне програмування Основною його метою є вирішення завдань і створення працюючих систем І не просто працюють, а працюють правильно, і притому весь час Найгірша ситуація, яку тільки можна уявити, – це коли здається, що програма працює, і вона дійсно ретельно тестована, але при всьому тому, наприклад, в одному з тисячі виконань видає невірні результати Користувачі та автори такої програми схильні довіряти їй і можуть дорого поплатитися за раптом виниклу помилку в результатах Тому правильність є першим критерієм якості програми

Завдання змінюються і розвиваються, змінюються дані, а також апаратна частина ЕОМ Тому навіть нехитра програма може потребувати змін протягом свого життєвого циклу Зміни не виняток, а норма для програмованої системи Тому наступне властивість, якої треба домагатися при розробці програми, – простота модифікації

Бурхливий прогрес мікроелектроніки привів до того, що вартість апаратної частини ЕОМ стала набагато нижче вартості розробки програмного забезпечення У 50-х і 60-х роках це співвідношення було зворотним тому в той час зявилося багато хитрих методів програмування, спрямованих на економію памяті ЕОМ, скорочення часу виконання програми, мінімізацію числа звернень до диску На жаль, ці хитрування були потенційним джерелом помилок програми було важко читати і майже неможливо модифікувати Висновок зрозумілий: при розробці програм треба домагатися їх ефективності всіма засобами, але не за будь-яку ціну Досягнення правильності програми і простоти її модифікації важливіше досягнення ефективності Але як же домогтися цих похвальних цілей До цього часу основним виробником програм є людина, мислення якої індивідуально і ірраціонально Тому будь-яка оцінка методів роботи програмістів з точки зору того, наскільки ефективно досягаються зазначені вище цілі, сполучена з великими труднощами Проте в даний час багато фахівців в області програмування пропагують метод розробки програм, відомий під назвою структурного проектування Проводилися порівняння структурного проектування з іншими методами показали, що воно має помітні переваги

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

великими обсягами структурованих даних За цим методом структура програми визначається виходячи зі структури даних Інший метод, якому ми збираємося слідувати в цій книзі, починається з опису вирішення завдання в узагальненому вигляді Потім у цей опис крок за кроком вносяться деталі до тих пір, поки це опис не стане настільки докладним, що по ньому буде досить легко написати програму Цей метод часто називають покрокової деталізацією, і так як процес його застосування починається з написання спільного уявлення рішення задачі, а завершується написанням конкретної про-

грами, то про нього говорять як про проектування зверху вниз. Всі методи структурного проектування побудовані за принципом Зверху вниз. У розд 13 була описана структура простої програми в наступному вигляді:

Введення Обробка Висновок

відповідає верхньому рівню розробки Проста програма на Бейсике, наведена в гол 1, відповідає нижньому рівню розробки У цьому розділі вже йшлося про декілька нових елементах мови Бейсік, структурою яких можна скористатися при розробці програм, застосувавши таку форму запісі1:

ДЛЯ циклу дію НАСТУПНИЙ прохід циклу ЯКЩО умова ТО дію

ЯКЩО умова ТО действіе1 ІНАКШЕ действіе2

Тут дія являє собою один або кілька операторів, що не викликають переходу в

іншу частину програми Перші три елементи описів, введення, обробка і виведення, служать прикладами дій Трьом щойно введеним елементам описів відповідають такі структограмми:

1В оригіналі обігрується значення службових слів Бейсика як слів англійської мови У справжньому перекладі таке вживання передається набором російського еквівалента службового слова прописними буквами: ДЛЯ відповідає службовому слову FOR, НАСТУПНИЙ NEXT, ЯКЩО IF, ТО THEN, ІНАКШЕ ELSE, ВВЕДЕННЯ-INPUT, ДРУК PRINT, ПЕРЕЙТИ ДО GO ТО Прим перев

Звичайно, дія може бути і структурою ДЛЯ-НАСТУПНИЙ (тобто FOR-NEXT) або ЕСЛИ (IF) Прикладами можуть служити детально обговорювалися в підрозд 332 вкладені цикли і програма з підрозд 333, в якій структура ЕСЛИ (IF) була вкладена в цикл ДЛЯ-НАСТУПНИЙ (FORNEXT)

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

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

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

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

Рівень 1 Ввести число

Перевірити, чи має воно подільники Вивести результат

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

Введення

Перевірка Висновок

Деталізація 11:перевірити, чи має число подільники ДЛЯ кожного можливого дільника введеного числа ЯКЩО введене число ділиться без остачі на дільник ТО

ДРУК число не проста і СТОП НАСТУПНИЙ дільник

Структограмма цієї деталізації представляє собою розширення центрального прямокутника

“Перевірка рівня 1

Інші основні частини опису не вимагають деталізації, але тепер після того, як ми визначили в деталізації 11, що вихід з циклу ДЛЯ-НАСТУПНИЙ (FOR-NEXT) відбувається після перевірки всіх можливих дільників в ситуації, коли введене число ні на один з них не поділилося без остачі, висновок результату можна розписати детальніше Після обєднання всіх частин і виділення (переказів) службових слів Бейсика прописними буквами можна повністю скласти наступний рівень опису програми:

Рівень 2 ВВЕДЕННЯ числа

ДЛЯ кожного можливого дільника введеного числа ЯКЩО введене число ділиться без остачі на дільник ТО

ДРУК число не проста і СТОП НАСТУПНИЙ дільник ДРУК число просте КІНЕЦЬ

Ми дійшли вже майже до рівня операторів Бейсика Єдине, що ще вимагає уточнення, це пропозиція, наступне за ЯКЩО

Деталізація 21 ЯКЩО введене число ділиться без остачі на дільник

У термінах операторів Бейсика цю пропозицію можна написати: IF (A / B) = INT (А / В) THEN .

або більш ефективно, уникаючи одного зайвого поділу: D = A / B

IF D=INT (D) THEN .

В останньому випадку над злегка зміненим прямокутником ЯКЩО у наведеній вище структограмме виникає прямокутник процесу

Тепер програму можна записати повністю мовою операторів Бейсика (див розд 34) У цьому прикладі не було великого числа рівнів, але він досить добре ілюструє метод розробки

Цей метод отримає розвиток у наступних розділах, але він заслуговує кілька слів і тут

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

Іноді структури містять оператор GO TO Врахуйте, проте, що цьому оператору не відповідає ні один символ структограмми Тому дотримуйтеся наступного правила: всіма силами намагайтеся використовувати оператор GO TO для утворення правильних структур, але ні в якому разі не застосовуйте його довільним чином

Ймовірно, Ви вже звертали увагу, що перекладення на оператори Бейсика деяких структур, наприклад ЯКЩО-ТО-ІНАКШЕ (IF-THEN-ELSE), виглядає досить важкувато Якщо це кілька тривожило Вас, то Ви були праві у своїх відчуттях, оскільки Бейсік не орієнтований на структурне проектування і користуватися ним треба акуратно Додаткові засоби, включені до Бейсік в деяких системах, допомагають впоратися з деякими труднощами в цій галузі

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

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

ВПРАВИ

31&nbsp&nbsp&nbsp&nbsp Вартість поїздки на таксі визначається як сума посадкової плати в 25 пенсів і вартості пробігу з розрахунку 8 пенсів за кожні півмилі понад двох миль Користуючись словесними описами або структограммамі, розробіть програму, яка сприймає як введення довжину пробігу таксі в цілих милях, а виводить плату за проїзд

Один з можливих відповідей наведено в рішеннях вправ у додатку 1 Перекладіть це чи Ваше власне рішення на оператори Бейсика і запустіть отриману програму Що відбудеться, якщо запровадити не ціле, а дробове число миль Наприклад, 24 і 27 милі Що виникає в цих випадках проблема стане зрозуміліше, якщо визначити вартість пробігу в 8 пенсів за кожні повні півмилі і останню незакінчену частину У цій ситуації може виявитися корисною одна з числових функцій

32&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Наступна структограмма ілюструє дуже просту програму, що друкує число, його квадрат і куб:

ВВЕДЕННЯ N

ДРУК N, N * N, N * N * N

КІНЕЦЬ

Взявши цю структограмму за основу, намалюйте структограмму, що представляє програму друку таблиці квадратів і кубів всіх чисел від 1 до 10 Додайте відповідні заголовки стовпців, щоб показати зміст кожного з них

33&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp Доопрацювати програму з вправи 32 так, щоб на кожному рядку друкувалися ступеня числа до пятої включно Використовуйте для цього додатковий цикл FOR-NEXT і засоби управління висновком Інакше кажучи, на кожному рядку повинні друкуватися NI, де I змінюється від 1 до

5 При N = 4 висновок повинен виглядати наступним чином:

4&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp&nbsp 16              64               256              1024

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

34 Розробіть і напишіть програму для обчислення факторіала N, де N – ціле число

Факторіал часто записується як N і визначається співвідношенням

N=1*2*3*4* .. *N 83

Таким чином, 2 = 1 * 2 = 2 травня = 1 * 2 * 3 * 4 * 5 = 120

Значення N повинно вводитися в програму, від якої потрібно надрукувати це значення і його факторіал, забезпечивши висновок відповідними поясненнями Факторіал знаходить безпосереднє застосування в багатьох завданнях Наприклад, якщо ми хочемо зробити впорядковану вибірку R з N різних обєктів, то число різних вибірок (іноді званих розміщеннями і позначаються NPR) одно N / (NR). Врахуйте, що 0 по визначенню дорівнює 1

Нехай, наприклад, власник магазину в своєму розпорядженні вісьмома різними новими книгами для оформлення вітрини напередодні різдвяних свят, але відразу може виставити тільки пять з них Тоді число різних варіантів оформлення вітрини дорівнює числу розміщень за 5 з 8, тобто 8 / (8-5) = 6720

35 Розробіть і напишіть програму для обчислення середнього значення оцінок, виставлених на іспиті групі студентів Оцінка ставиться у відсотках від одиниці і, отже, може приймати значення від 0 до 100 Програма повинна бути настільки гнучкою, щоб нею сприймалося будь-яку кількість оцінок Один із способів досягти цього вводити особливе значення в якості ознаки кінця введення групи оцінок Це особливе значення не повинно використовуватися в обчисленнях щоб його можна було розпізнати, воно має лежати поза діапазону допустимих оцінок У нашому випадку в якості особливого значення можна вибрати негативне число або ж число, що перевищує 100

36 Розробіть і напишіть програму, яка перевіряє парність числа, що вводиться і виводить саме це число і результат перевірки (парне і непарне)

37 Розробіть і напишіть програму, яка визначає найбільшу кількість позитивних парних чисел, сума яких не перевищує 100

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

38 Розробіть і напишіть програму друку таблиці, що допомагає визначати податок з обороту, що нараховується на продані товари Податок становить 15 % від вартості товару Усі величини повинні виражатися в пенсах (100 пенсів = 1 фунт) таблиця повинна бути складена для цін від 0 пенсів до 2 фунтів стерлінгів з кроком 2 пенси і повинна мати належний заголовок:

Податок з обороту для цін від 0 пенсів до 2 фунтів стерлінгів

0

2

4

6

8

0

0

0

0

0

1

10

1

1

2

2

2

20

3

30

40

і т д

Врахуйте, що дрібна частина пенса відкидається і дотримання заданого формату таблиці дуже важливо У цьому завданні багато спільного зі структурами, використовуваними в задачі 33

Якщо Ви відчуваєте схильність до математики, то можете використовувати подібні структури для програми друку таблиць того ж виду, який зустрічається в довідниках з тригонометричним функціям, наприклад для таблиці значень синуса кутів 0 .. +90 градусів з кроком два градуси

39 Розробіть і напишіть програму для вирішення наступного завдання моделювання:

Поїзд, на якому Ви їздите на роботу, може відійти від станції з випередженням розкладу до 10 хв або з відставанням від розкладу до 5 хв Якщо Ви протягом місяця (рівного 20 робочим дням) приходите на станцію до моменту відправлення поїзда згідно з розкладом, то скільки разів Вам вдасться сісти на цей поїзд

Для моделювання реальної ситуації використовуйте генератор випадкових чисел Виходите з того, що всі часи в цілих хвилинах із зазначеного вище інтервалу рівноймовірні Таким чином, всього можливо 15 віддалених один від одного на хвилину часів відправлення поїзда, від 10-хвилинного випередження розкладу до 5-хвилинного відставання Вам же вдасться сісти на поїзд тільки в тих випадках, коли він відходить вчасно або спізнюється

310 В одній з різновидів гри в метання стрілок вимагається набрати рівно 301 очко Новачок кидає стрілку так, що вона потрапляє в мішень, з однаковою ймовірністю даючи від 0 очок (мимо мішені) до 20 Розробіть і напишіть програму для моделювання цієї гри і підрахунку числа метань стрілки

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

Джерело: Уолш Б Програмування на Бейсике: Пер з англ М: Радіо і звязок, 1988 336 с: ил

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*