Advertisement
Guest User

Untitled

a guest
Feb 28th, 2020
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 18.09 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. using System.Diagnostics;
  7. using System.Collections;
  8.  
  9. namespace lab2v2
  10. {
  11. interface IRateAndCopy
  12. {
  13. double Raiting { get; }
  14. object DeepCopy();
  15. }
  16.  
  17. class Person
  18. {
  19. private string name;
  20. private string surname;
  21. private System.DateTime birthday;
  22. public Person(string n, string s, System.DateTime b)
  23. {
  24. name = n;
  25. surname = s;
  26. birthday = b;
  27. }
  28. public Person()
  29. {
  30. name = "Мария";
  31. surname = "Краснова";
  32. birthday = new DateTime(2000, 04, 07);
  33. }
  34. public string Name
  35. {
  36. get
  37. {
  38. return name;
  39. }
  40. set
  41. {
  42. name = value;
  43. }
  44. }
  45. public string Surname
  46. {
  47. get
  48. {
  49. return surname;
  50. }
  51. set
  52. {
  53. surname = value;
  54. }
  55. }
  56. public System.DateTime Birthday
  57. {
  58. get
  59. {
  60. return birthday;
  61. }
  62. set
  63. {
  64. birthday = value;
  65. }
  66. }
  67. public int Year
  68. {
  69. get
  70. {
  71. return birthday.Year;
  72. }
  73. set
  74. {
  75. birthday = new DateTime(value, birthday.Month, birthday.Day);
  76. }
  77. }
  78. public override string ToString()
  79. {
  80. return string.Format("\nИмя: {0}\nФамилия: {1}\nДата рождения: {2}\n", name, surname, birthday);
  81. }
  82.  
  83. public virtual string ToShortString()
  84. {
  85. return string.Format("Имя: {0}\nФамилия: {1}\n", name, surname);
  86. }
  87.  
  88. public override bool Equals(object obj)
  89. {
  90. if (obj == null)
  91. {
  92. return false;
  93. }
  94. Person objPers = obj as Person;
  95. if (obj as Person == null)
  96. {
  97. return false;
  98. }
  99. return (objPers.Name == this.name && objPers.Surname == this.surname && objPers.birthday == this.birthday);
  100. }
  101. public static bool operator ==(Person p1, Person p2)
  102. {
  103. return (p1.Name == p2.Name && p1.Birthday == p2.Birthday && p1.Surname == p2.Surname);
  104. }
  105. public static bool operator !=(Person p1, Person p2)
  106. {
  107. return !(p1 == p2);
  108. }
  109. public override int GetHashCode()
  110. {
  111. int hashcode = 0;
  112. char[] NameChar = name.ToCharArray();
  113.  
  114. foreach (char ch in NameChar)
  115. {
  116. hashcode += Convert.ToInt32(ch);
  117. }
  118. char[] SurnameChar = surname.ToCharArray();
  119. foreach (char ch in SurnameChar)
  120. {
  121. hashcode += Convert.ToInt32(ch);
  122. }
  123. hashcode += birthday.Year * birthday.Month;
  124. return hashcode;
  125. }
  126. public virtual object DeepCopy()
  127. {
  128. Person persCopy = new Person(name, surname, birthday);
  129. return persCopy;
  130. }
  131. }
  132.  
  133. enum Frequency { Weekly, Monthly, Yearly };
  134. class Article : IRateAndCopy
  135. {
  136. public Person Avtor { get; set; }
  137. public string Nazv_Stat { get; set; }
  138. public double Reiting { get; set; }
  139.  
  140. public Article(Person avtor, string nazv, double reiting)
  141. {
  142. Avtor = avtor;
  143. Nazv_Stat = nazv;
  144. Reiting = reiting;
  145. }
  146. public Article()
  147. {
  148. Avtor = new Person();
  149. Nazv_Stat = "Московский Наблюдатель";
  150. Reiting = 1;
  151. }
  152. public override string ToString()
  153. {
  154. return string.Format("\nДанные автора статьи: {0}\nНазвание статьи: {1}\nРейтинг статьи: {2}\n", Avtor, Nazv_Stat, Reiting);
  155. }
  156.  
  157. public object DeepCopy()
  158. {
  159. return new Article(this.Avtor, this.Nazv_Stat, this.Reiting);
  160. }
  161. public double Raiting
  162. {
  163. get { return Reiting; }
  164. }
  165. }
  166.  
  167.  
  168. class Magazine : Edition,IRateAndCopy
  169. {
  170. private string name_magazine;
  171. private Frequency information_about_period;
  172. private DateTime date_vihoda;
  173. private int tirazh;
  174. //private readonly List<Article> list_stat_in_magazine = new List<Article>();
  175. private System.Collections.ArrayList spisok_redaktor_magazine = new ArrayList();
  176. private System.Collections.ArrayList list_stat_in_magazine = new ArrayList();
  177. public Magazine(string name, Frequency information, DateTime date, int tir)
  178. {
  179. name_magazine = name;
  180. information_about_period = information;
  181. date_vihoda = date;
  182. tirazh = tir;
  183. }
  184. public Magazine()
  185. {
  186. Random rnd = new Random();
  187. name_magazine = "Имя журнала";
  188. information_about_period = new Frequency();
  189. date_vihoda = new DateTime(rnd.Next(2000, 2021), rnd.Next(1, 13), rnd.Next(1, 28));
  190. tirazh = 10000;
  191.  
  192. }
  193. public System.Collections.ArrayList List_stat_in_magazine
  194. {
  195. get
  196. {
  197. return list_stat_in_magazine;
  198. }
  199. set
  200. {
  201. list_stat_in_magazine = value;
  202. }
  203. }
  204.  
  205. public double Sredn_reiting
  206. {
  207. get
  208. {
  209. double sum = 0;
  210. foreach (Article a in list_stat_in_magazine)
  211. sum += a.Reiting;
  212. return sum / list_stat_in_magazine.Count;
  213. }
  214. }
  215.  
  216. public string Name_of_magazine
  217. {
  218. get
  219. {
  220. return name_magazine;
  221. }
  222. set
  223. {
  224. name_magazine = value;
  225. }
  226. }
  227.  
  228. public Frequency Information_about_period
  229. {
  230. get
  231. {
  232. return information_about_period;
  233. }
  234. set
  235. {
  236. information_about_period = value;
  237. }
  238. }
  239.  
  240. public DateTime Date_vihoda
  241. {
  242. get
  243. {
  244. return date_vihoda;
  245. }
  246. set
  247. {
  248. date_vihoda = value;
  249. }
  250. }
  251.  
  252. public int Tirazh
  253. {
  254. get
  255. {
  256. return tirazh;
  257. }
  258. set
  259. {
  260. tirazh = value;
  261. }
  262. }
  263.  
  264. public bool this[Frequency index]
  265. {
  266. get
  267. {
  268. bool rez;
  269. if (index == Information_about_period) rez = true;
  270. else rez = false;
  271. return rez;
  272. }
  273. }
  274. public void AddArticles(params Article[] list_stat_in_magazine)
  275. {
  276. this.list_stat_in_magazine.AddRange(list_stat_in_magazine);
  277. }
  278.  
  279. public override string ToString()
  280. {
  281. return "\nНазвание журнала: " + Name_of_magazine + "\nПериодичность выхода журнала: " + Information_about_period +
  282. "\nДата выхода: " + Date_vihoda + "\nТираж: " + Tirazh + "\nСПИСОК СТАТЕЙ В ЖУРНАЛЕ: " + string.Join("\n", list_stat_in_magazine) + "\nСПИСОК РЕДАКТОРОВ ЖУРНАЛА: " + string.Join("\n", spisok_redaktor_magazine);
  283. }
  284. public string ToShortString()
  285. {
  286. return "Название журнала: " + Name_of_magazine +
  287. "\nПериодичность выхода журнала: " + Information_about_period +
  288. "\nДата выхода: " + Date_vihoda +
  289. "\nТираж: " + Tirazh +
  290. "\nCредний рейтинг статьи: " + Sredn_reiting;
  291. }
  292.  
  293. public System.Collections.ArrayList Spisok_redaktor_magazine
  294. {
  295. get
  296. {
  297. return spisok_redaktor_magazine;
  298. }
  299. set
  300. {
  301. spisok_redaktor_magazine = value;
  302. }
  303. }
  304. public void AddEditors(params Person[] spisok_redaktor_magazine)
  305. {
  306. this.spisok_redaktor_magazine.AddRange(spisok_redaktor_magazine);
  307. }
  308.  
  309. public override object DeepCopy()
  310. {
  311. Magazine m = new Magazine(Name_of_magazine, Information_about_period, Date_vihoda, Tirazh);
  312. m.List_stat_in_magazine = List_stat_in_magazine;
  313. m.Spisok_redaktor_magazine = Spisok_redaktor_magazine;
  314. return m;
  315. }
  316. public double Raiting
  317. {
  318. get
  319. {
  320. return Sredn_reiting;
  321. }
  322. }
  323.  
  324. public Edition getEditionset
  325. {
  326. get
  327. {
  328. return new Edition(Nazv_izd,Date_vih_izd,Tirazh_izd);
  329. }
  330. set
  331. {
  332. this.Nazv_izd = value.Nazv_izd;
  333. this.Date_vih_izd = value.Date_vih_izd;
  334. this.Tirazh_izd = value.Tirazh_izd;
  335. }
  336. }
  337.  
  338. public IEnumerable<double> Perebor_stat_s_reiting(double r)
  339. {
  340.  
  341. ArrayList stat_s_reiting_bolshe = new ArrayList();
  342. bool someBool;
  343. foreach (Person pers in list_stat_in_magazine)
  344. {
  345. someBool = true;
  346. foreach (Article a in list_stat_in_magazine)
  347. {
  348. if (a.Reiting>r)
  349. {
  350. someBool = true;
  351. }
  352. }
  353. if (8someBool)
  354. {
  355. AutorsWithoutP.Add(pers);
  356. //Console.WriteLine(pers.ToShortString());
  357. }
  358.  
  359. }
  360. for (int i = 0; i < AutorsWithoutP.Count; i++)
  361. {
  362. yield return (Person)AutorsWithoutP[i];
  363. //Console.Write(((Person)AutorsWithoutP[i]).ToShortString());
  364. }
  365.  
  366. }
  367. }
  368. class Edition
  369. {
  370. Random rnd = new Random();
  371. protected string nazv_izd;
  372. protected DateTime date_vih_izd;
  373. protected int tirazh_izd;
  374. public Edition(string n, DateTime d, int t)
  375. {
  376. nazv_izd = n;
  377. date_vih_izd = d;
  378. tirazh_izd = t;
  379. }
  380. public Edition()
  381. {
  382. nazv_izd = "Название издания";
  383. date_vih_izd = new DateTime(rnd.Next(2000, 2021), rnd.Next(1, 13), rnd.Next(1, 28));
  384. tirazh_izd = 111;
  385. }
  386. public string Nazv_izd
  387. {
  388. get
  389. {
  390. return nazv_izd;
  391. }
  392. set
  393. {
  394. nazv_izd = value;
  395. }
  396. }
  397. public DateTime Date_vih_izd
  398. {
  399. get
  400. {
  401. return date_vih_izd;
  402. }
  403. set
  404. {
  405. date_vih_izd = value;
  406. }
  407. }
  408. public int Tirazh_izd
  409. {
  410. get
  411. {
  412. return tirazh_izd;
  413. }
  414. set
  415. {
  416. tirazh_izd = value;
  417. }
  418. }
  419. public virtual object DeepCopy()
  420. {
  421. return new Edition(this.Nazv_izd, this.Date_vih_izd, this.Tirazh_izd);
  422. }
  423. public int Tirazh_izdania
  424. {
  425. get
  426. {
  427. return tirazh_izd;
  428. }
  429. set
  430. {
  431. if (value <= 0)
  432. {
  433. throw new ArgumentOutOfRangeException("Тираж издания должен быть больше 0");
  434. }
  435. else
  436. {
  437. tirazh_izd = value;
  438. }
  439. }
  440. }
  441.  
  442. public override bool Equals(object obj)
  443. {
  444. if (obj == null)
  445. {
  446. return false;
  447. }
  448. Edition objEdition = obj as Edition;
  449. if (objEdition as Edition == null)
  450. {
  451. return false;
  452. }
  453. return objEdition.Nazv_izd == this.Nazv_izd && objEdition.Date_vih_izd == this.Date_vih_izd && objEdition.Tirazh_izd == this.Tirazh_izd;
  454.  
  455. }
  456.  
  457. public static bool operator ==(Edition e1, Edition e2)
  458. {
  459.  
  460. return (e1.Nazv_izd == e2.Nazv_izd && e1.Date_vih_izd == e2.Date_vih_izd && e1.Tirazh_izd == e2.Tirazh_izd);
  461.  
  462. }
  463. public static bool operator !=(Edition e1, Edition e2)
  464. {
  465. return !(e1 == e2);
  466. }
  467.  
  468. public virtual new int GetHashCode()
  469. {
  470. int HashCode = 0;
  471. foreach (char ch in Nazv_izd.ToCharArray())
  472. {
  473. HashCode += (int)Convert.ToUInt32(ch);
  474. }
  475. HashCode += Date_vih_izd.Year * Date_vih_izd.Month;
  476. HashCode += Tirazh_izd;
  477. return HashCode;
  478. }
  479. public virtual new string ToString()
  480. {
  481. return string.Format("\nНазвание издания: {0} \nДата выхода издания: {1} \nТираж изданий: {2}", Nazv_izd, Date_vih_izd, Tirazh_izd);
  482. }
  483. }
  484.  
  485. class Program
  486. {
  487. static void Main(string[] args)
  488. {
  489. int kolichestvo_person = 3;
  490. Random rnd = new Random();
  491. Person[] p = new Person[2 * kolichestvo_person];
  492. p[0] = new Person("Иван", "Иванов", new DateTime(rnd.Next(1980, 2000), rnd.Next(1, 13), rnd.Next(1, 28)));
  493. p[1] = new Person("Петр", "Петров", new DateTime(rnd.Next(1980, 2000), rnd.Next(1, 13), rnd.Next(1, 28)));
  494. p[2] = new Person("Елена", "Сидорова", new DateTime(rnd.Next(1980, 2000), rnd.Next(1, 13), rnd.Next(1, 28)));
  495. p[3] = new Person("Олег", "Носов", new DateTime(rnd.Next(1980, 2000), rnd.Next(1, 13), rnd.Next(1, 28)));
  496. p[4] = new Person("Марина", "Геваева", new DateTime(rnd.Next(1980, 2000), rnd.Next(1, 13), rnd.Next(1, 28)));
  497. p[5] = new Person("Елизавета", "Архипова", new DateTime(rnd.Next(1980, 2000), rnd.Next(1, 13), rnd.Next(1, 28)));
  498.  
  499. Article[] a = new Article[2 * kolichestvo_person];
  500. a[0] = new Article(p[0], "Статья №1", rnd.Next(1, 101));
  501. a[1] = new Article(p[1], "Статья №2", rnd.Next(1, 101));
  502. a[2] = new Article(p[2], "Статья №3", rnd.Next(1, 101));
  503. a[3] = new Article(p[0], "Статья №4", rnd.Next(1, 101));
  504. a[4] = new Article(p[1], "Статья №5", rnd.Next(1, 101));
  505. a[5] = new Article(p[2], "Статья №6", rnd.Next(1, 101));
  506.  
  507. int kolichestvo_magazine = 2;
  508. Magazine[] m = new Magazine[kolichestvo_magazine];
  509. m[0] = new Magazine("Золотое солнышко", (Frequency)rnd.Next(0, 3), new DateTime(rnd.Next(2000, 2021), rnd.Next(1, 13), rnd.Next(1, 28)), rnd.Next(1, 1001));
  510. m[1] = new Magazine("Московский наблюдатель", (Frequency)rnd.Next(0, 3), new DateTime(rnd.Next(2000, 2021), rnd.Next(1, 13), rnd.Next(1, 28)), rnd.Next(1, 1001));
  511.  
  512. Console.WriteLine("\nЗадание №3-4:\n");
  513. m[0].AddArticles(a[0], a[1], a[2]);
  514. m[1].AddArticles(a[3], a[4], a[5]);
  515.  
  516. for (int i = 0; i < kolichestvo_magazine; i++)
  517. {
  518. Console.WriteLine((i + 1) + ") " + m[i].ToString() + "\n");
  519. }
  520.  
  521. Console.WriteLine("\nЗадание №1:\n");
  522. Console.WriteLine(m[0].ToShortString());
  523.  
  524. Console.WriteLine("\nЗадание №2:\n");
  525. Console.WriteLine("Frequency.Weekly: " + m[0][Frequency.Weekly] + "\nFrequency.Monthly: " + m[0][Frequency.Monthly] + "\nFrequency.Yearly: " + m[0][Frequency.Yearly]);
  526.  
  527. Console.WriteLine("\nЗадание №5:\n");
  528. var odnomer_array = new Article[1000000];
  529. var sw = Stopwatch.StartNew();
  530. for (int i = 0; i < 1000000; i++)
  531. odnomer_array[i] = new Article();
  532. sw.Stop();
  533.  
  534. Console.WriteLine("Время выполнения операций с элементами одномерного массива: ");
  535. Console.WriteLine(sw.Elapsed);
  536.  
  537. var dvum_pryamoug_array = new Article[1000, 1000];
  538.  
  539. sw = Stopwatch.StartNew();
  540. for (int i = 0; i < 1000; i++)
  541. for (int j = 0; j < 1000; j++)
  542. dvum_pryamoug_array[i, j] = new Article();
  543. sw.Stop();
  544.  
  545. Console.WriteLine("Время выполнения операций с элементами двумерного прямоугольного массива: ");
  546. Console.WriteLine(sw.Elapsed);
  547.  
  548. var dvum_stup_array = new Article[1000][];
  549. for (int i = 0; i < dvum_stup_array.Length; i++)
  550. dvum_stup_array[i] = new Article[1000];
  551.  
  552. sw = Stopwatch.StartNew();
  553. for (int i = 0; i < 1000; i++)
  554. for (int j = 0; j < 1000; j++)
  555. dvum_stup_array[i][j] = new Article();
  556. sw.Stop();
  557.  
  558. Console.WriteLine("Время выполнения операций с элементами двумерного ступенчатого массива: ");
  559. Console.WriteLine(sw.Elapsed);
  560. Console.ReadKey();
  561. }
  562. }
  563. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement