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

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


 

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

52538. Дитинство Ісуса Христа 116 KB
  Мета: ознайомити учнів з дитинством Спасителя, вказуючи на Його чесноти; розвивати бажання брати собі за взірець Христа; виховувати послух, покірність та повагу до батьків.
52539. Всі ми родом із дитинства 97 KB
  Евеліна Хромченко Дитинство Дитинствоказка мов чарівна мить Там завжди сонячно і світло. Надія Красоткіна Дитинство це коли день починається з першим променем сонця звуком тихих маминих кроків запахом теплого хліба співом птахів і триває довгодовго це коли дерева великі а ти внизу і помічаєш так багато: і мурашки і бджолу на квітці і пухнасту гусеницю і чуєш як росте трава і можеш залізти на найвище дерево і переплести саму широку річку і все можеш зробити сам. Варто подумати про дитинство і пам’ять підкине дивні...
52540. Свято здоровя 43 KB
  Підвищувати відповідальність за особисте здоровя, здоровя родини; пропагувати і заохочувати до співпраці дітей та батьків; розвивати і зміцнювати в учнів почуття прекрасного в побуті, працьовитість, повагу до звичаїв і традицій рідного народу; виховувати повагу в особистих стосунках, почуття колективізму та взаємодопомоги.
52541. Сценарій свята для учнів 2-х класів «Різдвяне диво» 81 KB
  Заходять колядники звіздар ангел зірка коза дохтур Звіздар. Де коза ходить там жито родить Де коза ногою там жито копою Де коза рогом там жито стогом. Коза скаче а потім падає Пуць Коза впала нежива стала Ой Ой Яка добра тваринка була Що ж то робити Усі. Де тут хто тут пацієнт Виліковую в момент Робить козі укол коза оживає встає танцює танець всі плескають у долоні Усі.
52542. Ти наше диво калинове, кохана українська мово 61 KB
  Ведуча Мова А що таке мова Народ говорить слово до слова зложиться мова а Т . Ведучий Найбільше і найдорожче добро кожного народу – це його мова ота жива схованка людського духу його багата скарбниця в яку народ складає і своє давнє життя і свої сподіванки розум досвід почуття. Добута з надр далеких поколінь Ти – скарб наш вічний українська мова. Мова ...
52543. ДИВОСВІТ. Методичні рекомендації 8.27 MB
  Методичні рекомендації «Дивосвіт» вихователя Менського дошкільного закладу «Сонечко» Шевель Наталії Володимирівни допоможуть педагогічним працівникам дошкільних закладів у створенні та облаштуванні розвивального простору в групах дошкільних навчальних закладів.
52544. Методичний проект «Центр дитячої творчості Дивосвіт як заклад життєвої компетентності» 58.5 KB
  Підвищити рівень орієнтованності навчально виховного процесу закладу на розвиток життєвої компетентності особистості учня. Націлити педагогів закладу до розробки та впровадження авторських програм навчальних посібників нового покоління 3. Переорієтнувати виховну систему закладу відповідно до вимог часуформування через освіту здорового способу життя дітей та молоді інтеграцію освіти до європейського та світового освітнього простору 5.
52545. Україно! Мій духмяний дивоцвіт 53 KB
  Разом: Збулося Хлопчик: 24 серпня 1991 року Верховна Рада України урочисто прийняла Акт проголошення України незалежною самостійною демократичною державою. На цьому шляху загинула незліченна кількість кращих синів і дочок України які відстоювали її незалежність. Шлях України позначений високими степовими могилами руїнами та прекрасними безіменними невідомо коли і ким складеними піснями. Хлопчик: Народе України Твоєю силою волею.
52546. Внутрішні гіперпосилання на веб-сторінках 107.5 KB
  Ввести поняття внутрішнього посилання, ознайомити з правилом запису внутрішнього посилання, навчити учнів створювати внутрішні гіперпосилання на веб-сторінці, розвивати пізнавальну активність, вміння індивідуально працювати за комп’ютером, виховувати інтерес до інформатики і біології, формувати інтерес учнів до природи рідного краю і питань збереження рослин.