Реферати

Курсова робота: Обробка текстових файлів

Зайнятість і безробіття проблеми і рішення. Міністерство утворення Республіки Бєларус Академія Керування при Президенті Республіки Бєларус Кафедра економічної теорії і проблем ринку

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

Апамея Сирія. Апамея (на Оронте) Апамея Сірійська , (лат. Apamea , араб. ‏أفاميا‎/‏آفاميا‎‎‎,

Місто темної сторони в добутку Н. В. Гоголя Ревізор. Місто темної сторони в добутку Н. В. Гоголя "Ревізор" Автор: Гоголь Н. В. Деякі сучасники Гоголя вважали, що драматург - по цензурних розуміннях - написав алегорію, що під видом повітового міста їм зображена столиця російської імперії - Петербург. Навряд чи це так: Гоголю, по складу його творчої манери, була далека алегорія.

Повноваження Президента Республіки Бєларус. ЗМІСТ Уведення......3 1. Глава держави. Його характеристика......5

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ

ВОСТОЧНОУКРАИНСКИЙ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ ім. В. Даля

СЕВЕРОДОНЕЦКИЙ ТЕХНОЛОГІЧНИЙ ІНСТИТУТ

КАФЕДРА КОМП'ЮТЕРНОЇ ІНЖЕНЕРІЇ

ПОЯСНЮВАЛЬНА ЗАПИСК А

до курсової роботи по програмуванню

на тему:

«Обробка текстових файлів»

Виконав студент групи

Перевірив викладач

Северодонецк 2009

форма № У 9.01

Утв. наказом Мінвуза УССР

від 3 серпня 1984 р. № 253

Северодонецкий технологічний інститут

(найменування вузу)

Кафедра Комп'ютерної інженерії

Дисципліна Програмування

Спеціальність

Курс 2 Група Семестр 3

ЗАВДАННЯ

на курсовий проект (роботу) студента

Садикова Ільміра Ільдусовича

(прізвище, ім'я, по батькові)

1. Тема проекту (роботи)

2. Обробка текстових файлів

2. Термін здачі студентом закінченого проекту (роботи)

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

Для введення і висновку використати компоненти Delphi.

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

5. Перелік графічного матеріалу (з точною вказівкою обов'язкових креслень)

6. Дата видачі завдання

КАЛЕНДАРНИЙ ПЛАН

№ п/п

Найменування етапів курсового проекту (роботи)

Термін виконання етапів проекту (роботи)

Примітка

1

Отримання завдання

2

Розробка алгоритму

3

Складання блок-схеми алгоритму

4

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

5

Підготовка початкових даних

6

Відладка програми

7

Отримання результатів

9

Оформлення пояснювальної записки

10

Захист курсової роботи

Студент

(підпис)

(прізвище, ім'я, по батькові)

Керівник

(підпис) (прізвище, ім'я, по батькові)

ЗМІСТ

РЕФЕРАТ

ВВЕДЕННЯ

1. АНАЛІЗ ТЕХНІЧНОГО ЗАВДАННЯ І ПОСТАНОВКА ЗАДАЧІ ПРОЕКТУВАННЯ

2. РОЗРОБКА АЛГОРИТМУ ПРОГРАМИ

3 ОПИС СТРУКТУРИ ПРОГРАМИ

3.1 Опис змінних

3.2 Опис допоміжних процедур і функцій

3.3 Алгоритм основної програми

4. ІНСТРУКЦІЯ ОПЕРАТОРУ

ВИСНОВКИ

ПЕРЕЛІК ПОСИЛАНЬ

ДОДАТОК А. БЛОК-СХЕМА АЛГОРИТМУ

ДОДАТОК Б. ЛИСТИНГ ПРОГРАМИ

ДОДАТОК В. ПРИМЕР ВИКОНАННЯ ПРОГРАМИ

РЕФЕРАТ

Пояснювальна записка до курсової роботи містить:

сторінок - 24;

малюнків - 6;

таблиць - 1;

додатків - 3.

Мета роботи: розробити програму обробки числових послідовностей з кодом на мові Pascal.

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

МАСИВ, ЦИКЛ, ЗАЛИШОК ВІД ДІЛЕННЯ, АЛГОРИТМ, ПРОЦЕДУРА, ПОЄДНАННЯ

ВВЕДЕННЯ

Даний курсовий проект був розроблений в середовищі TurboPascal 7.0 з базовою мовою програмування Pascal. Серед безлічі мов Pascal є найбільш універсальною і мовою, що легко вивчається. На сьогодні TurboPascal отримав продовження в мові ObjectPascal з підтримкою всіх сучасних можливостей об'єктно-орієнтованого програмування і в такій могутній системі проектування як Delphi.

Для виконання даної курсової роботи необхідно розробити алгоритм рішення поставленого завдання, правильно указавши послідовне виконання відповідних команд для отримання необхідних результатів.

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

1. Аналіз технічного завдання і постановка задачі проектування

Згідно із завданням дана послідовність з nцелих чисел. Необхідно написати програму, вибору з них декількох чисел так, щоб сума вибраних чисел ділилася на деяке число k.

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

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

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

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

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

- виведення на екран інформації про завдання і мету програми;

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

- введення користувачем послідовності цілих чисел;

- перебір всіх можливих поєднань елементів із запропонованої послідовності;

- визначення сум елементів в поєднаннях і виведення на екран послідовностей і отриманих сум;

- визначення, чи задовольняє сума умові: ділиться на kбез залишку;

- виведення на екран, якщо знайдене шукане поєднання елементів;

- виведення на екран, якщо жодне з поєднань не задовольняє умові задачі;

- можливість збереження результатів роботи в текстовому файлі на жорсткому диску.

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

2. Розробка алгоритму програми

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

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

Згідно із завданням необхідно буде виконати перебір всіх можливих поєднань елементів. Оскільки число елементів в поєднанні умовою не задане, то повинні будуть перебрані всі поєднання С1n, С2n, Сin, Сnn, для кожного з яких повинні будуть обчислені суми. Відомо, що

Кількість можливих поєднань з кожним новим числом зростає з досить високою швидкістю. Оскільки задача учбова, то обмежимо штучно довжину послідовності, наприклад, 20 числами. Таким чином, на етапі введення потрібно контролювати введене число n, і у випадку коли N більше 20, то доцільно повідомити користувача про обмеження, що накладаються на довжину послідовності і запитати повторне введення числа. Оскільки помилка може бути неодноразовою (умисне або помилкове введення підряд декількох некоректних значень), то доцільно буде для введення кожного числа організувати цикл, умовою завершення якого буде коректно введене значення. Для заповнення елементів масиву можна використати цикл із заданим числом повторень.

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

Для реалізації цього способу виділити наступну подзадачи:

1) Подзадача генерації поєднань із заданої кількості натуральних чисел від 1 до N. Существуют досить прості методи генерації подібних поєднань. У цьому випадку кожне з таких сгенерированних поєднань буде задавати номери позицій елементів з початкової послідовності, які потрібно взяти для посчета суми. Наприклад, якщо було сгенерировано поєднання 2, 3, 5. То воно задає набір з трьох чисел початкової послідовності, які стоять на 2, на 3 і на 5 місці в масиві цілих чисел.

2) Подзадача обчислення суми чисел в поєднанні. Тобто, потрібно витягнути числа із заданими номерами з початкового масиву і визначити їх суму.

Подзадачу 1 будемо запускати в цикле від m=1 до n, де m буде задавати кількість чисел в поєднанні. Після виконання подзадачи 1 організуємо цикл по всіх сгенерированним поєднаннях і для кожного з них будемо обчислювати суму за допомогою подзадачи 2. Для обчисленої суми будемо визначати залишок від ділення на число k, і якщо він рівний нулю, то шуканий набір знайдений і задачу можна вважати вирішеною.

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

Для можливості аналізу результатів роботи доцільно буде виводити всі елементи поєднання і суми на екран, а також супроводити виведення на екран, збереженням результатів в текстовому файлі на жорсткому диску.

Детальний опис розробленої програми, алгоритмів і їх програмної реалізації приведено в подальших розділах. Схема алгоритму представлена в Пріложенії А.

3 ОПИС СТРУКТУРИ ПРОГРАМИ

3.1 Опис змінних

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

У розділі опису типів приведено два типи:

Arr = array[1..20] of integer; - буде використовуватися для завдання початкового масиву

Arr2=array[1..1000,0..20] of byte - буде використовуватися для зберігання сгенерированних поєднань

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

Також в розділі описів змінних описані змінні, призначення яких приведене в таблиці 3.1.

Таблиця 3.1- Опис змінних програми

Найменування

Тип

Призначення

N

integer

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

K

integer

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

Chisla

Arr

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

що обробляється Idx

Arr

масив, в якому зберігаються сгенерированние поєднання. Кожний рядок задає окреме поєднання (позиції елементів в масиві Chisla)

i, j

integer

тимчасові змінні, необхідні для організації циклів при переборі елементів послідовності

m

integer

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

kol

integer

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

fnd

boolean

логічна змінна, яка використовується як прапор, чи знайдена шукана сума (true- якщо знайдена)

tf

text

змінна текстового файла, використовується для збереження результатів роботи в текстовому файлі

S

string

рядкова змінна, що використовується для формування рядка висновку з складеним поєднанням і сумою

St

string

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

3.2 Опис допоміжних процедур і функцій

В програмі приведено опис однієї допоміжної процедури і однієї функції.

Процедура Info(varft:)(TEXT) призначена для виведення допоміжної про програму і про завдання на курсову роботу. Потрібно помітити, що процедура дублює виведення на екран монітора і в текстовий файл з результатами виконання програми. При цьому, параметр ft:TEXTкак разів і задає файл, в який здійснюється висновок. Умовою застосування даної процедури є те, що перед викликом процедури файлової змінної ftдолжно бути призначено ім'я фізичного файла на жорсткому диску за допомогою процедури ASSIGN. Крім того, файл заздалегідь повинен бути відкритим для запису за допомогою функції REWRITE. Текст процедури приведений в рядках 15-35.

Процедура GenerateSochet(var Sochet:)(Arr2;)(n, m:)(integer;)(var kol:)(integer) призначена для генерації поєднань з n натуральних чисел від 1 до Nпо m.

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

Параметр Nзадает кількість чисел з яких потрібно вибирати поєднання.

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

Через параметр KOLбудет повернена загальна кількість сгенерированних поєднань.

Тобто у вихідному мас сиве Sochetследует переглянути рядки від 1 до KOL це і будуть поєднання, причому в кожному рядку потрібно аналізувати тільки елементи від 1 до m.

Алгоритм генерації поєднань приведений на малюнку А.1 додатку А. Код процедури приведений в рядках 49 -70 додатку

1. Початкове поєднання утворить послідовність 1, 2,. . m, а останнє n-m+1,...,n.

2. Перехід до наступного поєднання здійснюється за наступним правилом: потрібно переглянути поточне поєднання з кінця і знайти елемент, який можна збільшити. Тобто такий елемент що Sochet[kol, i] < > n-m+i. Далі збільшується цей елемент на 1, а частину поєднання, що залишилася заповнюємо числами натурального ряду великими зміненого елемента в порядку їх проходження.

Функція Summ(Chisla:)(Arr;)(Idxs:)(Arr2;)(m, nom:)(integer):integer

призначена для визначення суми чисел відповідного поєднання, де:

Chisla - масив початкових чисел, які будуть підсумовуватися;

Idxs - масив сгенерированних поєднань (містить тільки номери позицій);

M - кількість елементів в поєднанні;

NOM - номер поєднання з масиву Idxs, суму якого треба знайти.

У функції буде аналізуватися рядок NOM масиву Idxs, точніше не весь рядок, а тільки перші M елементів. Ці елементи задають номери чисел в масиві Chsila, які треба просуммировать.

Алгоритм виконання описаних дій приведений на малюнку А.2 додатку А, а код функції приведений в рядках 36-48 додатку

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

Після цього здійснюється введення початкових даних, а саме: числа елементів послідовності Nи самої последователности чисел. Введення початкових даних організоване в рядках 76-85 лістинга в додатку У тілі цього циклу виконуються дії:

- генеруються всі можливі поєднання по m натуральних елементів 1.. N за допомогою процедури GenerateSochet;

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

- виведення на екран і вфайл елементів поєднання (цикл по jв рядках 95 99);

- обчислення суми за допомогою функції SUMM (рядок 100);

- перевірка отриманої суми на ділення на K (залишок від ділення визначається за допомогою оператора MOD), (рядки 103-113);

Для перетворення цілого числа в рядок використовується процедура STR(a;)(varS:)(string), де а задає ціле число, а через параметр S повертається рядкове значення.

Якщо сума Smудовлетворяет умові і шукане поєднання чисел знайдено, встановлюється прапор fnd і здійснюється вихід з циклу.

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

4. ІНСТРУКЦІЯ ОПЕРАТОРУ

Розроблена програма являє собою файл, що виконується SOCHET.EXE розміром 8096 байт. У програмі виконується обробка числової послідовності.

Після запуску програми з'являється вікно, зображене на малюнку 4.1.

Малюнок 4.1 - Головне вікно програми

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

Малюнок 4.2 - Реакція програми на помилкове введення кількості N

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

Після коректного введення програма виконує перебір всіх поєднань. На малюнку 4.3 показаний приклад виконання програми, а вміст файла sochet.res приведений в додатку

Малюнок 4.4 - Результат роботи програми (пошук невдалий)

Функціонування програми повністю відповідає завданню.

ВИСНОВКИ

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

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

Перелік посилань

1. Зуев Е. А. Программірованіє на мові Turbo Pascal 6.0,7.0. - М.: Радіо і зв'язок, Веста, 1993.

2. Фаронов В. В. Turbo Pascal 7.0. Початковий курс. - М.: Нолидж, 2000.

3. Йенсен До., Вірт Н. Паськаль. Керівництво для користувача і опис мови. - М.: «Фінанси і статистика», 1982. - С. 151.

4. Вирт Н. Алгорітми+структура даних= програми. - М.: «Мир», 1985. - С. 406.

5. Грогоно П. Программірованіє на мові Паськаль. - М.: «Мир», 1982. - С. 384.

6. Перминов О. Н. Язик програмування Паськаль: Довідник. - М.: «Радіо і зв'язок», 1989. - С. 128. - ISBN 5-256-00311-9

7. Культін Н. Б. Delphi 6. Програмування на Object Pascal. - СПб.: «БХВ-Петербург», 2001. - С. 528. - ISBN 5-94157-112-7

8. Моргун А. Н. Программірованіє на мові Паськаль (Pascal). Основи обробки структур даних. - М.: «Діалектика», 2005. - С. 576. - ISBN 5‐8459‐0935‐X

9. Гранпер Же., Котте Р. Трехмерная графіка на Турбо-Паскале

10. Белецкий Я. Турбо-Паскаль з графікою для ПК.- М.: Машинобудування, 1991. - 320 з.

11. Бородич Ю. С. і інш. Паскаль для ПК: Довідкова допомога. - МН.: Висш. шк.: "БФ ГИТМП НИКА", 1991. - 365 з.

12. Зуев Е. А. Язик програмування Turbo Pascal 6.0. - М.: Унитех, 1992. - 298 з.

13. Фаронов В. В. Турбо-Паскаль (в 3 книгах). - М.: "МВТУ-ФЕСТО ДИДАКТИК", 1992-1993.

ДОДАТОК А

Алгоритм програми

Малюнок А.1 - Алгоритм процедури генерації поєднань GenerateSochet

Малюнок А.2 - Алгоритм функції визначення суми SUMM

Малюнок А.3 - Алгоритм виконання тіла програми

ДОДАТОК Би

Лістинг програми

1. unit Unit1;

2. program sochet;

3. uses crt;

4. type

5. Arr = array[1..20] of integer;

6. Arr2=array[1..1000,0..20] of byte;

7. var

8. i, j, m, n, k, kol:integer;

9. Sm: integer;

10. Idx: Arr2;

11. Chisla: Arr;

12. fnd: boolean;

13. tf:TEXT;

14. S, St:string;

15. Procedure Info(var ft:)(TEXT);

16. begin

17. writeln('**********************************************************');

18. writeln('**** КУРСОВА РОБОТА ПО ПРОГРАМУВАННЮ ****');

19. writeln('** **');

20. writeln('** Задана послідовність з n чисел **');

21. writeln('** Вибрати в послідовності декілька таких чисел, **');

22. writeln('** щоб їх сума ділилася на m. **');

23. writeln('**** ****');

24. writeln('**********************************************************');

25. writeln;

26. writeln(ft,'******************************************);

27. writeln(ft,'**** КУРСОВА РОБОТА ПО ПРОГРАМУВАННЮ ****');

28. writeln(ft,'** **');

29. writeln(ft,'** Задана послідовність з n чисел **');

30. writeln(ft,'** Вибрати в послідовності декілька таких чисел, **');

31. writeln(ft, '** щоб їх сума ділилася на m. **');

32. writeln(ft,'**** ****');

33. writeln(ft,'******************************************);

34. writeln(ft,'');

35. end;

36. {процедура підсумовує числа з номерами, які задані в рядку nom масиву Idxs}

37. Function Summ(Chisla:)(Arr;)(Idxs:)(Arr2;)(m, nom:)(integer):integer;

38. var

39. idx, i, Sm:integer;

40. begin

41. Sm:=0;

42. for i:=1 to m do

43. begin

44. idx:= Idxs[nom, i];

45. Sm:=Sm + Chisla[idx];

46. end;

47. Summ:=Sm;

48. end;

49. {процедура генерації поєднання з n по m, для чисел 1,2,. .., n}

50. Procedure GenerateSochet(var Sochet:Arr2; n, m:integer;var kol:integer);

51. var

52. ii, jj:integer;

53. begin

54. kol:=1;

55. { Генерація самого першого поєднання }

56. for ii:=0 to m do

57. Sochet[kol, ii]:=ii;

58. repeat

59. { Vivod(Sochet, nom, m);}

60. kol: = kol+1;

61. for ii:=0 to m do

62. Sochet[kol, ii]:=Sochet[kol-1, ii];

63. ii:=m;

64. while (Sochet[kol, ii]=(n-m+ii))and(ii > 0) do

65. ii:=ii-1; { пошук елемента для зміни }

66. Sochet[kol, ii]:=Sochet[kol, ii]+1;

67. for jj:=ii+1 to m do

68. Sochet[kol, jj]:=Sochet[kol, jj-1]+1; { зміна правої частини поєднання }

69. until ii=0;

70. end;

71. begin

72. clrscr;

73. assign(tf,'sochet.res');

74. rewrite(tf);

75. INFO(tf);

76. write('Задайте кількість чисел n: )('); readln(n);

77. while (n < 1)>< or (n > 20) do

78.>< begin

79.>< write(' Помилкове введення!>< Задайте кількість чисел n (n > 0;)(n < 21):><');

80.>< readln(n);><

81.>< end;><

82.>< write('Задайте числа: )(');><

83.>< for i:><=1 to n do

84.>< read(Chisla[i]);><

85.>< write('Задайте k (на нього повинна ділитися сума без залишку): )(');>< readln(k);><

86.>< fnd:><=false;><

87.>< for m:><=1 to n do

88.>< begin

89.>< GenerateSochet(Idx, n, m, kol);><

90.>< Writeln (' * * * Перебір поєднань по ', M,' елементів!>< * * *');

91.>< Writeln (tf, ' * * * Перебір поєднань по ', M,' елементів!>< * * *');

92.>< for i:><=1 to kol-1 do

93.>< begin

94.>< S:><='';

95.>< for j:><=1 to m do

96.>< begin

97.>< Str(Chisla[Idx[i, j]], St);><

98.>< S: ><= S + St + ' ';><

99.>< end;><

100.>< Sm: ><= Summ(Chisla, Idx, m, i);><

101.>< Str(Sm, St);><

102.>< S:><= S + ' Sum = '+St;><

103.>< if (Sm mod k) = 0 then

104.>< begin

105.>< S:><=S+ ' Шукана пара!><';

106.>< writeln(S);><

107.>< writeln(tf, S);><

108.>< fnd: ><= true;><

109.>< break;><

110.>< end else begin

111.>< writeln(S);><

112.>< writeln(tf, S);><

113.>< end;><

114.>< end;><

115.>< if fnd then break;><

116.>< end;><

117.>< if fnd then begin

118.>< writeln('Шукана комбінація знайдена!)(');><

119.>< writeln(tf,'Искомая комбінація знайдена!)(')

120.>< end else begin

121.>< writeln('Шукана комбінація чисел НЕ знайдена!)(');><

122.>< writeln(tf,'Искомая комбінація чисел НЕ знайдена!)(');><

123.>< end;><

124.>< Close(tf);><

125.>< readln;><

126.>< end.><

ДОДАТОК В

Приклад виконання програми (пошук вдалий)

************************************************************

**** КУРСОВА РОБОТА ПО ПРОГРАМУВАННЮ ****

** **

** Задана послідовність з n чисел **

** Вибрати в послідовності декілька таких чисел, **

** щоб їх сума ділилася на m.>< **

**** ****

************************************************************

* * * Перебір поєднань по 1 елементів!>< * * *

2 Sum = 2

13 Sum = 13

27 Sum = 27

9 Sum = 9

8 Sum = 8

* * * Перебір поєднань по 2 елементів!>< * * *

2 13 Sum = 15

2 27 Sum = 29

2 9 Sum = 11

2 8 Sum = 10

13 27 Sum = 40

13 9 Sum = 22

13 8 Sum = 21

27 9 Sum = 36

27 8 Sum = 35

9 8 Sum = 17

* * * Перебір поєднань по 3 елементів!>< * * *

2 13 27 Sum = 42

2 13 9 Sum = 24

2 13 8 Sum = 23 Шукана пара>!)(

Шукана комбінація знайдена!)(

Приклад виконання програми (пошук невдалий)

************************************************************

**** КУРСОВА РОБОТА ПО ПРОГРАМУВАННЮ ****

** **

** Задана послідовність з n чисел **

** Вибрати в послідовності декілька таких чисел, **

** щоб їх сума ділилася на m.)( **

**** ****

************************************************************

* * * Перебір поєднань по 1 елементів!)( * * *

8 Sum = 8

9 Sum = 9

21 Sum = 21

5 Sum = 5

* * * Перебір поєднань по 2 елементів!)( * * *

8 9 Sum = 17

8 21 Sum = 29

8 5 Sum = 13

9 21 Sum = 30

9 5 Sum = 14

21 5 Sum = 26

* * * Перебір поєднань по 3 елементів!)( * * *

8 9 21 Sum = 38

8 9 5 Sum = 22

8 21 5 Sum = 34

9 21 5 Sum = 35

* * * Перебір поєднань по 4 елементів!)( * * *

8 9 21 5 Sum = 43

Шукана комбінація чисел НЕ знайдена!)(

)