Advertisement
kqlul123

Untitled

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