3565

Послідовність рішення задачі по розробці програми

Лекция

Информатика, кибернетика и программирование

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

Украинкский

2012-11-03

78 KB

12 чел.

Послідовність рішення задачі по розробці програми

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

Формулювання задачі в термінах деякої прикладної області знань;

Формалізація задачі, побудова математичної та інформаційної моделі;

Розробка алгоритму рішення задачі;

Вибір мови програмування ;

Складання програми;

Тестування та відладка програми;

Передача програми в експлуатацію.

Формалізація задачі, побудова математичної та інформаційної моделі 

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

  •  визначення вихідних даних;
  •  визначення кінцевого результату;
  •  визначення послідовності дій по перетворюванню початкових даних в кінцевий результат.

Задачі включають в себе математичні та інформаційні проблеми.

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

Розробка алгоритму рішення задачі

На основі розробленої математичної моделі створюється алгоритм, що являє собою послідовність дій, які описані в словесному, графічному, словесно-формульному вигляді. Алгоритм повинен відповідати шести основним властивостям: зрозумілість; дискретність; масовість; формальність; визначеність; закінченість.

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

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

Існує три базові алгоритмічні структури.

Перша - слідування.

Друга - розгалуження.

Третя - циклічні.

Рис 2.1. Базові алгоритмічні структури

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

  •  синтаксичний;
  •  процедурний;
  •  модульний;
  •  об’єктно-компонентний.

Синтаксична структуризація визначає сучасну культуру написання програм і полягає в дотриманні декількох простих принципів:

програма будується блоками, укладеними в основному між парою операторних дужок begin... end; такі блоки називаються складеними операторами;

головним програмним блоком є тіло самої програми;

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

блоки можуть бути вкладеними;

команди одного рівня укладеності записуються з однаковим відступом від початку рядка;

команди одного рівня укладеності і близькі за призначенням іноді зручно записувати в одному рядку;

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

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

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

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

Об’єктно-компонентний рівень припускає застосування особливої спеціалізованої ідеології і методології написання програм. Він передбачає достатньо високий рівень підготовки фахівців, що використовують дану технологію. При цьому уся програма складається з множини різноманітних об'єктів. Навіть сама програма - це теж об'єкт. Будь-який об'єкт складається з набору властивостей і методів. Властивості визначають кількісні і якісні характеристики об'єктів, а методи - дії, які можуть виконувати ці об'єкти, тобто методи описують поводження об'єктів. Всі об'єкти функціонують в єдиному програмному середовищі, що знаходиться в постійному очікуванні якоїсь події. Такими подіями можуть бути натискання клавіші, клацання кнопки миші в визначеній області екрана, покращення курсору миші в конкретну область екрана тощо. Далі спеціальний програмний диспетчер переадресує цю подію для опрацювання потрібному об'єктові, в якого викликається для цих цілей відповідний метод. Об'єктно-орієнтована методологія дозволяє писати величезні програмні комплекси. Практично все сучасне програмне забезпечення (ОС Windows, Word, Excel, Access тощо) написане з використанням даної технології.

Складання програми

Алгоритм описується операторами вибраної мови програмування.

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

Що ж входить в поняття мови програмування? По-перше, це набір дій, які ми можемо виконати з допомогою ЕОМ. Серед набору дій можна відмітити базові:

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

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

Тепер ми можемо відповісти на питання, що входить в поняття мови програмування:

1.Середовище програмування - це набір програм, що забезпечує комп’ютерний етап підготовки програми.

2.Форма представлення даних в програмі (константи, змінні, масиви і т.д.).

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

Тестування та відладка програми

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

Відладка = Тестування + Пошук помилок + Редагування.

Успіх відладки програми в значній мірі зумовлює раціональна організація тестування. При відладці програми відшукуються і усуваються, в основному, ті помилки, наявність яких в програмі встановлюється при тестуванні. Як було вже відмічено, тестування не може довести правильність програми, в кращому разі воно може продемонструвати наявність в нім помилки. Виникає два завдання. Перше завдання: підготувати такий набір тестів, щоб виявити в ній по можливості більше число помилок. Проте чим довше продовжується процес тестування (і відладки в цілому), тим більшою стає вартість програми. Звідси друге завдання: визначити момент закінчення відладки програми (або окремих компонентів). Ознакою можливості закінчення відладки є повнота обхвату пропущеними через програму тестами безлічі різних ситуацій, що виникають при виконанні програм, і відносний рідкісний прояв помилок на останньому відрізку процесу тестування.

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

Рис.2.2. Спектр підходів до проектування тестів

 

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

  •  на кожну використовувану функцію або можливість хоч би один тест.
  •  на кожну область і на кожну межу зміни якої-небудь вхідної величини хоч би один тест.
  •  на кожну особливу (виняткову) ситуацію, вказану в специфікаціях, хоч би один тест.

У другому випадку ця стратегія базується на принципі: кожна команда кожної програми повинна пропрацювати хоч би на одному тесті.

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

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

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

Заповідь 2. Хороший той тест, для якого висока вірогідність виявити помилку, а не той, який демонструє правильну роботу програми.

Заповідь 3. Готуйте тести як для правильних, так і для неправильних даних.

Заповідь 4. Документуйте пропуск тестів через комп'ютер; детально вивчайте результати кожного тесту; уникайте тестів, пропуск яких не можна повторити.

Заповідь 5. Кожен модуль підключайте до програми тільки один раз; ніколи не змінюйте програму, щоб полегшити її тестування.

Заповідь 6. Пропускайте наново всі тести, пов'язані з перевіркою роботи якої-небудь програми або її взаємодії з іншими програмами, якщо до неї були внесені зміни (наприклад, в результаті усунення помилки).

Задача 2.1. «Sprite»

Група програмістів зібралася в понеділок і на всі свої гроші купила «Sprite» в пляшках місткістю по 0,25 л., не забувши узяти здачу. У вівторок вони здали порожній посуд, додали здачу, що залишилася, і знов купили стільки таких же пляшок «Sprite», скільки могли. Так вони діяли до п'ятниці. В п'ятницю, здавши посуд і додавши здачу з четверга, вони змогли купити тільки одну пляшку напою. При цьому грошей у них вже не залишилося. Вам необхідно написати програму, яка визначає мінімальну суму, яку мали програмісти в понеділок.

Формат вхідних даних: Вхідний файл складається з єдиного рядка, що містить два цілі числа F (вартість однієї пляшки «Sprite») і P (вартість однієї порожньої пляшки з під «Sprite») розділених пропуском.

Обмеження на вхідні дані

  1.  Вартості пляшки «Sprite» і порожньої пляшки виражаються цілими позитивними числами і не перевершують 1 000 000 коп. кожна;
  2.  Порожня пляшка дешевша за повну пляшку;
  3.  Початкова сума не перевершує 2 000 000 000 коп.

Формат вихідних даних:

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

Приклади вхідних і вихідних даних:

Вхідні дані:

Вихідні дані:

7 3

83

Лістинг до задачі 2.1.

Розв‘язок задачі на мові С#:

using System;

using System.Collections.Generic;

using System.IO;

using System.Text;

namespace Sprite

{

class Sprite

{

static void Main()

{

StreamReader IN = new StreamReader("a.in");

string s = IN.ReadLine();

char[] c = s.Split(' ');

int a, b, k, s, x;

a = int.Parse(s[0]);

b = int.Parse(s[1]);

x = a; k = 0;

while ((k != 1)& (x<2000000))

{

k = x / a;

s = x - k * a;

for (int i = 1; i <= 4; i++)

{

s = s + k * b;

k = s / a;

s = s - k * a;

}

x++;

}

StreamWriter OUT = new StreamWriter("a.out");

x = x-1;

OUT.WriteLine(x.ToString);

OUT.Close();

}

}

}

Тести:

а.in

a.out

7 3

83

2 1

17

9 5

41

8 4

68

10 4

136

250 25

250225

12 3

777

17 6

303

150 10

506390

98 12

52128

 

Тестуюча програма:

@echo off

for %%t in (1, 2, 3, 4, 5, 6, 7, 8, 9, 10) do (

ECHO ---TEST %%t---

copy DATS\a%%t.in a.in >nul

a.exe

fc /w a.out SOLS\a%%t.out

pause

)

del a.exe

del a.in

del a.out

pause

Якщо для Вас приведений текст програми невідомий, пропустіть і поверніться до нього після опрацювання третього модуля курсу.


 

А также другие работы, которые могут Вас заинтересовать

18393. Зведення та групування статистичних даних 71.5 KB
  Тема 4. Зведення та групування статистичних даних 4.1 Суть статистичного зведення та групування. 4.2 Основні завдання та види групувань. 4.3 Основні питання методології статистичних групувань. 4.4 Повторне вторинне групування. 4.1 Суть статистичного зведення та гр
18394. Аналіз рядів розподілу 219.5 KB
  Тема 5 Аналіз рядів розподілу 5.1 Ряди розподілу. 5.2 Статистичні таблиці. 5.3 Суть і характеристики варіації. 5.4 Методи обчислення дисперсії. 5.5 Характеристики форми розподілу. 5.6 Криві розподілу. 5.1 Ряди розподілу Ряд розподілу – основа будь якого групуван...
18395. Вибірковий метод 205 KB
  Тема 6. Вибірковий метод. 6.1. Суть і переваги вибіркового спостереження. 6.2. Обчислення помилок вибірки і визначення меж інтервалу для середньої величини і частки. 6.3. Різновиди вибірок. 6.4. Багатоступеневі і багатофазні вибірки. 6.5. Визначення обсягу вибірки і способ
18396. Статистична перевірка гіпотез 37.5 KB
  Тема 7. Статистична перевірка гіпотез Дослідження істотності вибіркових середніх часток і дисперсій можна провести на основі відомих у математичній статистиці законів розподілу та виразів для розрахунку критеріальних статистик. Спочатку формулюють так звану нулоьву ...
18397. СТАТИСТИЧНІ МЕТОДИ ВИМІРЮВАННЯ ВЗАЄМОЗВЯЗКІВ 487 KB
  ТЕМА 8. СТАТИСТИЧНІ МЕТОДИ ВИМІРЮВАННЯ ВЗАЄМОЗВ€ЯЗКІВ. 8.1. Види взаємозв язків між явищами 8.2. Метод аналітичного групування. 8.3. Основи кореляційнорегресійного аналізу. 8.4. Множинна регресія. 8. 1. Види взаємозв язків між явищами. Всі явища суспільного життя іс
18398. Аналіз таблиць взаємної спряженості( співзалежності) 193.5 KB
  Тема 9. Аналіз таблиць взаємної спряженості співзалежності. 9.1. Таблиці співзалежності. 9.2. Рангова кореляція. 9.1. Таблиці співзалежності. При стохастичному зв’язку кожному значенню ознаки х відповідає певна множина значень ознаки у які варіюють і утворюють ряд р
18399. СТАТИСТИЧНЕ ВИВЧАННЯ ДІНАМІКИ 179.5 KB
  Тема 10. СТАТИСТИЧНЕ ВИВЧАННЯ ДІНАМІКИ. 10.1. Дінамічний ряд – основа аналізу і прогнозування соціальноекономічного розвитку. 10.2. Характеристики дінамічних рядів. 10.3. Аналіз структурних зрушень. 10.4. Особливості вимірювання взаємозв€язків за даними динамічних рядів. ...
18400. Визначення тенденції розвитку. Аналіз коливань і сталості дінамічних рядів 106 KB
  Тема 11. 11.1. Визначення тенденції розвитку. 11.2. Аналіз коливань і сталості дінамічних рядів. 11.1. Визначення тенденції розвитку. Тенденція – це певний напрям розвитку тривала еволюція яка набуває вигляду більшменш плавної троекторії. Статистичне вивчення тенденці...
18401. Індекси. Індекси із змінними і постійними вагами (ряди індексів) 214 KB
  Тема 12: Індекси 12.1. Суть індексів і роль їх у статистичноекономічному аналізі. 12.2. Методологічні принципи побудови індексів агрегатна форма. 12.3. Середньозважені інжекси арифметична чи гармонійна форми. 12.4. Індекси із змінними і постійними вагами ряди індексів. ...