47785 (608372), страница 2

Файл №608372 47785 (Обработка текстовых файлов) 2 страница47785 (608372) страница 22016-07-30СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

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



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 Алгоритм основной программы

Алгоритм выполнения основного тела программы и основных функций приведен на рисунке А.3 в приложении А. Так в процедуре в первую очередь осуществляется очистка экрана инициализация файловой переменной и открытие текстового файла «sochet.res» для записи результатов.

Затем производится вывод информации о задании курсовой работы на экран и в файл результатов при помощи вызова процедуры INFO.

После этого осуществляется ввод исходных данных, а именно: числа элементов последовательности 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. Зуев Е.А. Язык программирования 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 (n20) 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.


ПРИЛОЖЕНИЕ В

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

  1. ************************************************************

  2. **** КУРСОВАЯ РАБОТА ПО ПРОГРАММИРОВАНИЮ ****

  3. ** **

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

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

  6. ** чтобы их сумма делилась на m. **

  7. **** ****

  8. ************************************************************

  9. * * * Перебор сочетаний по 1 элементов! * * *

  10. 2 Sum = 2

  11. 13 Sum = 13

  12. 27 Sum = 27

  13. 9 Sum = 9

  14. 8 Sum = 8

  15. * * * Перебор сочетаний по 2 элементов! * * *

  16. 2 13 Sum = 15

  17. 2 27 Sum = 29

  18. 2 9 Sum = 11

  19. 2 8 Sum = 10

  20. 13 27 Sum = 40

  21. 13 9 Sum = 22

  22. 13 8 Sum = 21

  23. 27 9 Sum = 36

  24. 27 8 Sum = 35

  25. 9 8 Sum = 17

  26. * * * Перебор сочетаний по 3 элементов! * * *

  27. 2 13 27 Sum = 42

  28. 2 13 9 Sum = 24

  29. 2 13 8 Sum = 23 Искомая пара!

  30. Искомая комбинация найдена!

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

  1. ************************************************************

  2. **** КУРСОВАЯ РАБОТА ПО ПРОГРАММИРОВАНИЮ ****

  3. ** **

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

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

  6. ** чтобы их сумма делилась на m. **

  7. **** ****

  8. ************************************************************

  9. * * * Перебор сочетаний по 1 элементов! * * *

  10. 8 Sum = 8

  11. 9 Sum = 9

  12. 21 Sum = 21

  13. 5 Sum = 5

  14. * * * Перебор сочетаний по 2 элементов! * * *

  15. 8 9 Sum = 17

  16. 8 21 Sum = 29

  17. 8 5 Sum = 13

  18. 9 21 Sum = 30

  19. 9 5 Sum = 14

  20. 21 5 Sum = 26

  21. * * * Перебор сочетаний по 3 элементов! * * *

  22. 8 9 21 Sum = 38

  23. 8 9 5 Sum = 22

  24. 8 21 5 Sum = 34

  25. 9 21 5 Sum = 35

  26. * * * Перебор сочетаний по 4 элементов! * * *

  27. 8 9 21 5 Sum = 43

  28. Искомая комбинация чисел НЕ найдена!

Характеристики

Тип файла
Документ
Размер
6,64 Mb
Тип материала
Учебное заведение
Неизвестно

Список файлов курсовой работы

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7093
Авторов
на СтудИзбе
256
Средний доход
с одного платного файла
Обучение Подробнее