Обработка текстовых файлов

МИНИСТЕРСТВООБРАЗОВАНИЯ УКРАИНЫ
ВОСТОЧНОУКРАИНСКИЙНАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ им. В. Даля
СЕВЕРОДОНЕЦКИЙТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ
КАФЕДРА КОМПЬЮТЕРНОЙИНЖЕНЕРИИ 
/>ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовойработе по программированию на тему:
«Обработка текстовых файлов»
 
 
Северодонецк2007

форма № У 9.01 *
Утв. приказом Минвуза УССР
от 3 августа 1984 г. №253
Северодонецкийтехнологический институт
КафедраКомпьютернойинженерии
ДисциплинаПрограммирование
Специальность
Курс2 ГруппаСеместр 3
ЗАДАНИЕ
на курсовойпроект (работу) студента
СадыковаИльмира Ильдусовича
1. Тема проекта (работы)Обработка текстовых файлов
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.
В курсовой работе создана программа, которая реализуетвыполнение следующих функций: ввод пользователем с клавиатурыпоследовательности целых чисел, поиск во введенной последовательности несколькихтаких чисел, чтобы их сумма делилось на некоторое задаваемое пользователемчисло. Вывод результата осуществляется на экран монитора и дублируется втекстовый файл на жестком диске или внешнем накопителе. В первом разделекурсовой работы выполнен анализ технического задания, выделены функции,которыми должно обладать разрабатываемое приложение, а также сформулированы требованияк нему, произведена постановка задачи на проектирование. Во втором разделе выполняетсяанализ задачи проектирования, анализируется вид исходных данных и приводитсясловесный алгоритм работы программы. В третьем разделе рассматриваются алгоритмыразработанных процедур и функций, а также приводятся их описания. Креализованной программе разработана инструкция пользователя, которая приведенав четвертом разделе. Алгоритмы процедур приведены в приложении А. Листингпрограммы содержится в приложении Б.
Программа разработана с использованием языка Turbo Pascal.
МАССИВ, ЦИКЛ, ОСТАТОК ОТДЕЛЕНИЯ, АЛГОРИТМ, ПРОЦЕДУРА, СОЧЕТАНИЯ

/>/>/>ВВЕДЕНИЕ
Данный курсовой проект был разработан в среде Turbo Pascal 7.0 с базовым языком программирования Pascal. Среди множества языков Pascal является наиболее универсальным илегко изучаемым языком. На сегодня Turbo Pascal получилпродолжение в языке Object Pascal с поддержкой всех современныхвозможностей объектно-ориентированного программирования и в такой мощнойсистеме проектирования как Delphi.
Для выполнения данной курсовой работы необходимо разработатьалгоритм решения поставленного задания, правильно указав последовательноевыполнение соответствующих команд для получения необходимых результатов.
Цель работы заключается в том, чтобы правильно составитьалгоритм поставленной задачи по обработке числовой информации, разработать иотладить программу, реализующую разработанный алгоритм.
  />/>/>/>/>1. Анализ технического задания ипостановка задачи проектирования
Согласно заданию данапоследовательность из n целых чисел.Необходимо написать программу, выбора из них нескольких чисел так, чтобы суммавыбранных чисел делилась на некоторое число k.
Как видим, задание сводится кобработке числовой информации. Пользователю должна быть предоставленавозможность ввода обрабатываемых чисел. Кроме того, перед началом вводапользователь должен задать количество чисел в последовательности.
В качестве дополнительной функцииможно предусмотреть вывод информации о программе (ее выполняемых функциях) неэкран.
Также пользователь должен ввестинекоторое целое число k. Далееследует выбрать из предложенной последовательности несколько чисел так, чтобысумма выбраныхчисел делилась на заданное число k. Пользователю должно быть выдано сообщение, если такая комбинация чиселнайдена. Если требуемой комбинации элементов не найдено, то следует выдать соответствующее сообщение, что искомыхэлементов во введенной последовательности не обнаружено. Также для удобствапользователя можно выводить информацию обо всех возможных сочетаниях элементови сумму этих элементов.
Поскольку чисел может быть довольно многои вся информация может не поместиться на экран, следует предусмотретьвозможность дублирования всей выводимой на экран информации в текстовый файл на жестком диске.
Подытожив все вышесказанное можносформулировать требования к разрабатываемому программному обеспечению ивыполнить постановку задания на проектирование. Так, согласно заданию, программадолжна быть реализована в среде Turbo Pascal и должна выполнять следующие функции:
— вывод на экран информации о заданиии цели программы;
— ввод пользователем количества чисел последовательности склавиатуры;
— ввод пользователем последовательности целых чисел;
— перебор всех возможных сочетаний элементов из предложеннойпоследовательности;
— определение сумм элементов в сочетаниях и вывод на экранпоследовательностей и полученных сумм;
— определение, удовлетворяет ли сумма условию: делится на 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(var ft: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 приложения Б.
3.3 Алгоритм основной программы
После этого осуществляется ввод исходных данных, а именно:числа элементов последовательности N и самой последователности чисел. Ввод исходных данных организован в строках 76-85 листинга вприложении Б.
После ввода исходных данных организуется цикл по m (по количеству элементов всочетании). В теле этого цикла выполняются действия:
— генерируются все возможные сочетания по m натуральных элементов 1… N при помощи процедуры GenerateSochet;
— организуется цикл по i, в котором перебираются все из сгенерированных на предыдущемэтапе сочетания и выполняются действия:
— вывод на экран и в файлэлементов сочетания (цикл по j в строках95-99);
— вычисление суммы при помощи функции SUMM (строка 100);
— проверка полученой суммы на деление на K (остаток от деления определяется припомощи оператора MOD), (строки 103-113);
Для преобразования целого числа в строку используетсяпроцедура STR(a;var S:string), где a задает целое число, а через параметр S возвращаетсястроковое значение. Если сумма Sm удовлетворяетусловию и искомоесочетание чисел найдено,устанавливается флаг fnd и осуществляется выход из цикла.
В конце программы анализируется значение флага fnd, и еслифлаг установлен в false, то значит не была найдена последовательность,удовлетворяющая условию, о чем выводится соответствующее сообщение на экран и втекстовый файл.

4. ИНСТРУКЦИЯ ОПЕРАТОРУ
Разработанная программа представляет собой исполняемый файл SOCHET.EXE размером 8096 байт. В программе выполняется обработкачисловой последовательности.
После запуска программы появляется окно, изображенное нарисунке 4.1.
/>
Рисунок 4.1 – Главное окно программы
После этого пользователь может вести длинупоследовательности. На рисунке 4.2 задан пример реакции программы в случаеошибочного набора.
/>
Рисунок 4.2 – Реакция программы наошибочный ввод количества N

После корректного ввода длины последовательности пользовательможет задать саму последовательность целых чисел. После корректного вводапрограмма выполняет перебор всех сочетаний. На рисунке 4.3 показан примервыполнения программы, а содержимое файла sochet.resприведен в приложении В.
/>
Рисунок 4.3 – Результат работыпрограммы
На рисунке 4.4 приведен примервыполнения программы, когда среди всех сочетаний не было найдено ни одного,удовлетворяющего условию задачи.
/>
Рисунок 4.4 – Результат работыпрограммы (поиск неудачен)
Функционирование программы полностьюсоответствует заданию./>

ВЫВОДЫ
Данная курсовая работа была выполнена в полном соответствии поставленномузаданию и отлажена в среде Turbo Pascal 7.0. В ходевыполнения курсовой работы была разработана программа для обработки числовойпоследовательности.
В результате выполнения данной курсовой работы, я убедилась вшироких возможностях языка программирования Turbo Pascal, закрепила практические навыки программирования в cреде Turbo Pascal.

Перечень ссылок
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.   Зуев Е.А. Язык программирования TurboPascal 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(varSochet: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 (n20) do
78.                                                                                                                                                        begin
79.                                                                                                                                                        write(‘Ошибочный ввод!Задайте количество чисел n(n>0;n
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.
  ПРИЛОЖЕНИЕ В
Пример выполнения программы (поиск удачен)
/>

Пример выполнения программы (поиск неудачен)
/>