Смекни!
smekni.com

Обработка текстовых файлов (стр. 3 из 3)

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

Рисунок 4.4 – Результат работы программы (поиск неудачен)

Функционирование программы полностью соответствует заданию.


ВЫВОДЫ

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

В результате выполнения данной курсовой работы, я убедилась в широких возможностях языка программирования TurboPascal, закрепила практические навыки программирования в cреде 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

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