Advertisement
kqlul123

123

Nov 15th, 2018
136
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.21 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include "iostream"
  3. #include "cstdlib"
  4. #include "ctime"
  5. #include "string"
  6.  
  7. using namespace std;
  8. const int Years = 5;
  9. struct Gold
  10. {
  11. string CountryName;
  12. int GoldMining[Years];
  13. };
  14.  
  15. class TGold
  16. {
  17. private:
  18. Gold * Array;
  19. int NumberOfCountries;
  20. public:
  21. TGold(int);
  22. ~TGold();
  23. void Input();
  24. void RandomInput();
  25. void TableOutput();
  26. int SearchMaxYear(int Gold);
  27. float AverageGold(int Gold);
  28. int RandomNumber(int Min = 1, int MaximumNumber = 10);
  29. void FieldSort(int Field, bool q);
  30. void TableFileOutput(string path, string pathbin);
  31. };
  32.  
  33. TGold::TGold(int N) //выдедление оперативной памяти
  34. {
  35. NumberOfCountries = N;
  36. Array = new Gold[NumberOfCountries];
  37. }
  38.  
  39. TGold::~TGold() //деструктор
  40. {
  41. delete[]Array;
  42. }
  43.  
  44. int TGold::RandomNumber(int Min, int MaximumNumber)
  45. {
  46. int rnd = Min + rand() % MaximumNumber;
  47. return rnd;
  48. }
  49.  
  50. void TGold::RandomInput() //ввод количества золотодобывающих стран и случайных данных о них
  51. {
  52. int length;
  53. cout << "Введите длину названия для случайного ввода"<< endl;
  54. cin >> length;
  55.  
  56. for (int i = 0; i < NumberOfCountries; i++)
  57. {
  58. char *randomname = new char;
  59. for (int z = 0; z < length ; z++)
  60. {
  61. randomname[z] = (char)(65 + rand() % 26);
  62. randomname[z+1] = '\0';
  63. }
  64.  
  65. Array[i].CountryName = randomname;
  66. for (int j = 0; j < Years; j++)
  67. {
  68. Array[i].GoldMining[j] = RandomNumber(1, 2000);
  69. }
  70. }
  71.  
  72. }
  73.  
  74. void TGold::Input() //ввод с клавиатуры количества золотодобывающих стран и данных о них
  75. {
  76. for (int i = 0; i < NumberOfCountries; i++)
  77. {
  78. cout << "Введите название страны:" << endl;
  79. cin >> Array[i].CountryName;
  80. for (int j = 0; j < Years; j++)
  81. {
  82. cout << "Введите показатель золотодобычи за год " << j + 1 << endl;
  83. cin >> Array[i].GoldMining[j];
  84. }
  85. }
  86. }
  87.  
  88.  
  89.  
  90. int TGold::SearchMaxYear(int Gold) //поиск года с максимальной добычей в стране
  91. {
  92. int MaxYear = 1;
  93. int MaxValue = Array[Gold].GoldMining[0];
  94. for (int j = 0; j < Years; j++)
  95. {
  96. if (Array[Gold].GoldMining[j] > MaxValue)
  97. {
  98. MaxValue = Array[Gold].GoldMining[j];
  99. MaxYear = j + 1;
  100. }
  101. }
  102. return MaxYear;
  103. }
  104. float TGold::AverageGold(int Gold) //поиск среднего арифметического показателя золотодобычи в стране за 1 год
  105. {
  106. int sum = 0;
  107. for (int j = 0; j < Years; j++)
  108. {
  109. sum += Array[Gold].GoldMining[j];
  110. }
  111.  
  112. return float(sum) / Years;
  113. }
  114.  
  115. void TGold::FieldSort(int Field, bool q)
  116. {
  117. Gold x;
  118. int i, j, tmp;
  119. for (i = 0; i < NumberOfCountries - 1; i++)
  120. {
  121. for (j = i + 1; j < NumberOfCountries; j++)
  122. {
  123. tmp = 0;
  124. switch (Field)
  125. {
  126. case 1:
  127. tmp = strcmp(Array[i].CountryName.c_str(), Array[j].CountryName.c_str()) > 0; break;
  128. case 2:case 3:case 4:case 5: case 6:
  129. tmp = Array[i].GoldMining[Field - 2] > Array[j].GoldMining[Field - 2]; break;
  130. case 7:
  131. tmp = SearchMaxYear(i) > SearchMaxYear(j); break;
  132. case 8:
  133. tmp = AverageGold(i) > AverageGold(j); break;
  134. }
  135. if (q) tmp = !tmp;
  136. if (tmp)
  137. {
  138. x = Array[i];
  139. Array[i] = Array[j];
  140. Array[j] = x;
  141. }
  142. }
  143.  
  144. }
  145. }
  146.  
  147. void TGold::TableOutput() //вывод данных в виде таблицы
  148. {
  149. printf("%-12s", "Страна");
  150. printf("%-12s", "1й год");
  151. printf("%-12s", "2й год");
  152. printf("%-12s", "3й год");
  153. printf("%-12s", "4й год");
  154. printf("%-12s", "5й год");
  155. printf("%-12s", "Макс. год");
  156. printf("%-12s", "Ср. арифм.");
  157. printf("\n");
  158.  
  159. for (int i = 0; i < NumberOfCountries; i++)
  160. {
  161. printf("%-12s", Array[i].CountryName.c_str());
  162. printf("%-12d", Array[i].GoldMining[0]);
  163. printf("%-12d", Array[i].GoldMining[1]);
  164. printf("%-12d", Array[i].GoldMining[2]);
  165. printf("%-12d", Array[i].GoldMining[3]);
  166. printf("%-12d", Array[i].GoldMining[4]);
  167. printf("%-12d", SearchMaxYear(i));
  168. printf("%-12f", AverageGold(i));
  169. cout << endl;
  170. }
  171.  
  172. }
  173.  
  174. void TGold::TableFileOutput(string path, string pathbin)
  175. {
  176. FILE *kq, *q;
  177. fopen_s(&kq, path.c_str(), "wt");
  178. fprintf(kq, "%-12s", "Страна");
  179. fprintf(kq, "%-12s", "1й год");
  180. fprintf(kq, "%-12s", "2й год");
  181. fprintf(kq, "%-12s", "3й год");
  182. fprintf(kq, "%-12s", "4й год");
  183. fprintf(kq, "%-12s", "5й год");
  184. fprintf(kq, "%-12s", "Макс. год");
  185. fprintf(kq, "%-12s", "Ср. арифм.");
  186. fprintf(kq, "\n");
  187.  
  188. for (int i = 0; i < NumberOfCountries; i++)
  189. {
  190. fprintf(kq, "%-12s", Array[i].CountryName.c_str());
  191. fprintf(kq, "%-12d", Array[i].GoldMining[0]);
  192. fprintf(kq, "%-12d", Array[i].GoldMining[1]);
  193. fprintf(kq, "%-12d", Array[i].GoldMining[2]);
  194. fprintf(kq, "%-12d", Array[i].GoldMining[3]);
  195. fprintf(kq, "%-12d", Array[i].GoldMining[4]);
  196. fprintf(kq, "%-12d", SearchMaxYear(i));
  197. fprintf(kq, "%-12f", AverageGold(i));
  198. fprintf(kq, "\n");
  199. }
  200. fclose(kq);
  201.  
  202.  
  203. fopen_s(&q, pathbin.c_str(), "wb");
  204. for (int i = 0; i < 5; i++)
  205. {
  206. fwrite(Array + i, sizeof(Gold), 1, q);
  207. }
  208. fclose(q);
  209. }
  210.  
  211. int main()
  212. {
  213. srand(time(NULL));
  214. setlocale(LC_ALL, "Russian");
  215. int n;
  216. cout << "Введите количество золотодобывающих стран" << endl;
  217. cin >> n;
  218. TGold a(n);
  219. int vvod;
  220. cout << "Случайный ввод - 0, ввод с клавиатуры - 1" << endl;
  221. cin >> vvod;
  222. if (vvod == 0)
  223. a.RandomInput();
  224. else
  225. a.Input();
  226. a.TableOutput();
  227. int x, y;
  228.  
  229. bool w = 1;
  230. while (w)
  231. {
  232. cout << "Введите поле для сортировки (1-8)" << endl;
  233. cin >> x;
  234. cout << "Сортировка по возрастанию - 0, по убыванию - 1" << endl;
  235. cin >> y;
  236. a.FieldSort(x, y);
  237. a.TableOutput();
  238. do {
  239. cout << "Продолжать сортировать таблицу(1 - да, 0 - нет)" << endl;
  240. cin >> w;
  241. } while (w < 0 && w> 1);
  242. if (w)
  243. system("CLS");
  244. a.TableOutput();
  245. }
  246. a.TableFileOutput("C:\\Users\\STUD\\Desktop\\test\\text.txt", "C:\\Users\\STUD\\Desktop\\test\\file.bin");
  247.  
  248.  
  249. system("pause");
  250. return 0;
  251.  
  252. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement