Разработка программы по обработке числовой информации
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
Искомая комбинация чисел НЕ найдена!
Другие рефераты на тему «Программирование, компьютеры и кибернетика»:
Поиск рефератов
Последние рефераты раздела
- Основные этапы объектно-ориентированного проектирования
- Основные структуры языка Java
- Основные принципы разработки графического пользовательского интерфейса
- Основы дискретной математики
- Программное обеспечение системы принятия решений адаптивного робота
- Программное обеспечение
- Проблемы сохранности информации в процессе предпринимательской деятельности