Разработка программы по обработке числовой информации

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

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

Страница:  1  2  3  4 


Другие рефераты на тему «Программирование, компьютеры и кибернетика»:

Поиск рефератов

Последние рефераты раздела

Copyright © 2010-2024 - www.refsru.com - рефераты, курсовые и дипломные работы