Advertisement
Guest User

Untitled

a guest
Dec 18th, 2017
139
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 13.90 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.IO;
  7.  
  8. namespace LaboratorinisDarbas_P6_
  9. {
  10. /** Klasė komandos duomenims saugoti
  11. @class Komanda */
  12. class Komanda
  13. {
  14. private string pavadinimas, // komandos pavadinimas
  15. miestas, // miestas, kurį atstovauja komanda
  16. pavarde, // komandos trenerio pavardė
  17. vardas; // komandos trenerio vardas
  18. private int taskai, // taškai, kuriuos pelnė komanda
  19. laimejimai, // komandos laimėtų varžybų skaičius
  20. lygiosios; // komandos lygiosiomis sužaistų varžybų skaičius
  21.  
  22. /** Pradiniai komandos duomenys */
  23. public Komanda()
  24. {
  25. pavadinimas = "";
  26. miestas = "";
  27. pavarde = "";
  28. vardas = "";
  29. taskai = 0;
  30. laimejimai = 0;
  31. lygiosios = 0;
  32. }
  33. /** Komandos duomenų įrašymas
  34. @param pavadinimas - nauja pavadinimo reikšmė
  35. @param miestas - nauja miesto reikšmė
  36. @param pavarde - nauja pavardės reikšmė
  37. @param vardas - nauja vardo reikšmė
  38. @param taskai - nauja taškų reikšmė
  39. @param laimejimai - nauja laimėjimų reikšmė
  40. @param lygiosios - nauja lygiųjų reikšmė */
  41. public void Deti(string pavadinimas, string miestas, string pavarde,
  42. string vardas, int taskai, int laimejimai, int lygiosios)
  43. {
  44. this.pavadinimas = pavadinimas;
  45. this.miestas = miestas;
  46. this.pavarde = pavarde;
  47. this.vardas = vardas;
  48. this.taskai = taskai;
  49. this.laimejimai = laimejimai;
  50. this.lygiosios = lygiosios;
  51. }
  52. /** Įrašo lygiųjų skaičių */
  53. public void DetiLygiasias(int lyg) { lygiosios = lyg; }
  54. /** Grąžina lygiųjų skaičių */
  55. public int ImtiLygiasias() { return lygiosios; }
  56. /** Įrašo laimėjimų skaičių */
  57. public void DetiLaimejimus(int laim) {laimejimai = laim; }
  58. /** Grąžina laimėjimų skaičių */
  59. public int ImtiLaimejimus() { return laimejimai; }
  60. /** Įrašo komandos taškus */
  61. public void DetiTaskus(int task) { taskai = task; }
  62. /** Grąžina komandos taškus */
  63. public int ImtiTaskus() { return taskai; }
  64. /** Grąžina komandos pavadinimą */
  65. public string ImtiPav() { return pavadinimas; }
  66.  
  67. // Spausdinimo metodas
  68. public override string ToString()
  69. {
  70. string eilute;
  71. eilute = string.Format("{0, -14} {1, -15} {2, -15} {3, -15}",
  72. pavadinimas, miestas, pavarde, vardas);
  73. return eilute;
  74. }
  75.  
  76. /** Operatorius grąžina
  77. // true, jeigu pirmos komandos taškų kiekis yra didesnis už antros komandos taškų kiekį,
  78. // arba taškų kiekiai yra lygūs,
  79. // o pirmos komandos laimėjimų skaičius yra didesnis už antros komandos laimėjimų skaičių;
  80. // false - kitais atvejais. */
  81. public static bool operator >=(Komanda pirma, Komanda antra)
  82. {
  83. return pirma.taskai > antra.taskai ||
  84. pirma.taskai == antra.taskai && pirma.laimejimai > antra.laimejimai;
  85. }
  86. /** Operatorius grąžina
  87. // true, jeigu pirmos komandos taškų kiekis yra mažesnis už antros komandos taškų kiekį,
  88. // arba taškų kiekiai yra lygūs,
  89. // o pirmos komandos laimėjimų skaičius yra mažesnis už antros komandos laimėjimų skaičių;
  90. // false - kitais atvejais. */
  91. public static bool operator <=(Komanda pirma, Komanda antra)
  92. {
  93. return pirma.taskai < antra.taskai ||
  94. pirma.taskai == antra.taskai && pirma.laimejimai > antra.laimejimai;
  95. }
  96. }
  97. /** Klasė komandų duomenims saugoti
  98. @class Varžybos */
  99. class Varzybos
  100. {
  101. const int CMaxK = 100; // didžiausias galimas komandų skaičius
  102. private Komanda[] Komandos; // komandų duomenys
  103. public int n { get; set; } // komandų skaičius
  104. private int[,] Rezultatai; // I rato rezultatai
  105.  
  106. public Varzybos()
  107. {
  108. n = 0;
  109. Komandos = new Komanda[CMaxK];
  110. Rezultatai = new int[CMaxK, CMaxK];
  111. }
  112. /** Grąžina nurodyto indekso komandos objektą
  113. @param nr - komandos indeksas */
  114. public Komanda Imti(int nr) { return Komandos[nr]; }
  115.  
  116. /** Padeda į komandų objektų masyvą naują komandą ir
  117. // masyvo dydį padidina vienetu
  118. @param kom - komandos objektas */
  119. public void Deti(Komanda kom) { Komandos[n++] = kom; }
  120.  
  121. /** Pakeičia rezultatų matricos elementą
  122. @param i - 1-os komandos numeris
  123. @param j - 2-os komandos numeris
  124. @param r - naujas įvarčių skaičius */
  125. public void DetiRez(int i, int j, int r) { Rezultatai[i, j] = r; }
  126.  
  127. /** Grąžina rezultatų matricos elementą
  128. @param i - 1-os komandos numeris
  129. @param j - 2-os komandos numeris */
  130. public int ImtiRez(int i, int j) { return Rezultatai[i, j]; }
  131.  
  132. /** Pakeičia komandų objektų masyvo komandą,
  133. // kurios numeris nr
  134. @param nr - keičiamos komandos numeris
  135. @param kom - komandų objekto masyvas */
  136. public void PakeistiKomanda(int nr, Komanda kom) { Komandos[nr] = kom; }
  137.  
  138. /** Objektų masyvo papildymas komandos surinktais taškais,
  139. // laimėtų ir lygiųjų varžybų skaičiais */
  140. public void PapildytiKomanduDuomenis()
  141. {
  142. int skaicius;
  143. int kiekis;
  144. int suma;
  145. Komanda kom;
  146. for (int i = 0; i < n; i++)
  147. {
  148. skaicius = 0;
  149. kiekis = 0;
  150. suma = 0;
  151. for (int j = 0; j < n; j++)
  152. {
  153. if (ImtiRez(i, j) >= 0 &&
  154. ImtiRez(i, j) > ImtiRez(j, i))
  155. {
  156. suma = suma + 3;
  157. kiekis++;
  158. }
  159. if (ImtiRez(i, j) >= 0 &&
  160. ImtiRez(i, j) == ImtiRez(j, i))
  161. {
  162. suma = suma + 1;
  163. skaicius++;
  164. }
  165. }
  166. kom = Imti(i);
  167. kom.DetiTaskus(suma);
  168. kom.DetiLaimejimus(kiekis);
  169. kom.DetiLygiasias(skaicius);
  170. PakeistiKomanda(i, kom);
  171. }
  172. }
  173. /** Surikiuoja objektų masyvą pagal taškus ir
  174. // laimėtų varžybų kiekį. */
  175. public void RikiuotiMinMax()
  176. {
  177. Komanda kom;
  178. for (int i = 0; i < n - 1; i++)
  179. {
  180. int maxnr = i;
  181. for (int j = i + 1; j < n; j++)
  182. if (Imti(j) >= Imti(maxnr))
  183. maxnr = j;
  184. kom = Imti(i);
  185. // pakeitimai masyve Komandos
  186. PakeistiKomanda(i, Imti(maxnr));
  187. PakeistiKomanda(maxnr, kom);
  188. }
  189. }
  190. }
  191. class Program
  192. {
  193. /** Konstantos duomenų ir rezultatų failų vardams saugoti */
  194. const string CFd = "...\\...\\Duomenys.txt";
  195. const string CFr = "...\\...\\Rezultatai.txt";
  196.  
  197. static void Main(string[] args)
  198. {
  199. Varzybos varzybos = new Varzybos(); // varžybose dalyvaujančių komandų duomenys
  200. Skaityti(CFd, ref varzybos);
  201. if (File.Exists(CFr))
  202. File.Delete(CFr);
  203. using (var fr = File.CreateText(CFr))
  204. {
  205. fr.WriteLine("PRADINIAI DUOMENYS");
  206. fr.WriteLine();
  207. }
  208. Spausdinti(CFr, varzybos, " Informacija apie futbolo komandas ");
  209. using (var fr = File.AppendText(CFr))
  210. {
  211. fr.WriteLine();
  212. fr.WriteLine("REZULTATAI");
  213. fr.WriteLine();
  214. }
  215. varzybos.PapildytiKomanduDuomenis();
  216. SpausdintiTurnyrineLentele(CFr, varzybos, "Turnyrinė lentelė");
  217. varzybos.RikiuotiMinMax();
  218. SpausdintiTurnyrineLentele(CFr, varzybos, "Turnyrinė lentelė (surikiuota)");
  219. int minPralaim;
  220. using (var fr = File.AppendText(CFr))
  221. {
  222. fr.WriteLine("Mažiausiai pralaimėjimų turi komanda {0}, pralaimėjimų skaičius {1}.",
  223. MazPralTurKom(varzybos, out minPralaim), minPralaim);
  224. }
  225.  
  226. Console.WriteLine("Programa baigė darbą.");
  227. }
  228. /** Failo duomenis surašo į konteinerį,
  229. // įveda duomenis į dvimatį skaičių masyvą Rezultatai(n,n)
  230. @param fd - duomenų failo vardas
  231. @param varzybos - konteineris */
  232. static void Skaityti(string fd, ref Varzybos varzybos)
  233. {
  234. string pavadinimas,
  235. miestas,
  236. pavarde,
  237. vardas;
  238. int nn, ivarciai;
  239. string line;
  240. using (StreamReader reader = new StreamReader(fd))
  241. {
  242. line = reader.ReadLine();
  243. string[] parts;
  244. nn = int.Parse(line);
  245. for (int i = 0; i < nn; i++)
  246. {
  247. line = reader.ReadLine();
  248. parts = line.Split(';');
  249. pavadinimas = parts[0];
  250. miestas = parts[1];
  251. pavarde = parts[2];
  252. vardas = parts[3];
  253. Komanda kom;
  254. kom = new Komanda();
  255. kom.Deti(pavadinimas, miestas, pavarde, vardas, 0, 0, 0);
  256. varzybos.Deti(kom);
  257. }
  258. for (int i = 0; i < nn; i++)
  259. {
  260. line = reader.ReadLine();
  261. parts = line.Split(' ');
  262. for (int j = 0; j < nn; j++)
  263. {
  264. ivarciai = int.Parse(parts[j]);
  265. varzybos.DetiRez(i, j, ivarciai);
  266. }
  267. }
  268. }
  269. }
  270. /** Spausdina konteinerio duomenis ir
  271. // rezultatų matricą faile.
  272. @param fv - rezultatų failo vardas
  273. @param varzybos - komandos duomenų konteineris
  274. @param antraste - užrašas virš lentelės */
  275. static void Spausdinti(string fv, Varzybos varzybos, string antraste)
  276. {
  277. using (var fr = File.AppendText(fv))
  278. {
  279. int nr = 1;
  280. string bruksnys = new string('-', 60);
  281. fr.WriteLine(antraste);
  282. fr.WriteLine(bruksnys);
  283. fr.WriteLine("Nr. Pavadinimas Miestas Trenerio Trenerio ");
  284. fr.WriteLine(" pavardė vardas ");
  285. fr.WriteLine(bruksnys);
  286. for (int i = 0; i < varzybos.n; i++)
  287. fr.WriteLine("{0,2:d}. {1} ", i + 1, varzybos.Imti(i).ToString());
  288. fr.WriteLine(bruksnys);
  289. fr.WriteLine();
  290. fr.WriteLine("I rato rezultatų lentelė: ");
  291. fr.Write(" Nr.|");
  292. for (int j = 0; j < varzybos.n; j++)
  293. fr.Write("{0,3:d}", j + 1);
  294. fr.WriteLine();
  295. fr.WriteLine("----|-------------------------------");
  296.  
  297. for (int i = 0; i < varzybos.n; i++)
  298. {
  299. fr.Write("{0,3:d} |", nr);
  300. for (int j = 0; j < varzybos.n; j++)
  301. fr.Write("{0,3:d}", varzybos.ImtiRez(i, j));
  302. fr.WriteLine();
  303. nr++;
  304. }
  305. }
  306. }
  307. /** Spausdina turnyrinę lentelę faile.
  308. @param fv - rezultatų failo vardas
  309. @param varzybos - komandos duomenų konteineris
  310. @param antraste - užrašas virš lentelės */
  311. static void SpausdintiTurnyrineLentele(string fv, Varzybos varzybos, string antraste)
  312. {
  313. using (var fr = File.AppendText(fv))
  314. {
  315. string bruksnys = new string('-', 41);
  316. fr.WriteLine(antraste);
  317. fr.WriteLine(bruksnys);
  318. fr.WriteLine(" Pavadinimas Laimėta Lygiosios Taškai ");
  319. fr.WriteLine(bruksnys);
  320. for (int i = 0; i < varzybos.n; i++)
  321. fr.WriteLine(" {0, -12} {1,4:d} {2,4:d} {3,4:d}",
  322. varzybos.Imti(i).ImtiPav(), varzybos.Imti(i).ImtiLaimejimus(),
  323. varzybos.Imti(i).ImtiLygiasias(), varzybos.Imti(i).ImtiTaskus());
  324. fr.WriteLine(bruksnys);
  325. fr.WriteLine();
  326. }
  327. }
  328. /** Suranda ir grąžina mažiausiai pralaimėjimų turinčios komandos pavadinimą.
  329. @param varzybos - objekto vardas
  330. @param min - pralaimėtų varžybų kiekis */
  331. static string MazPralTurKom(Varzybos varzybos, out int min)
  332. {
  333. string pav = "";
  334. min = 100;
  335. for (int i = 0; i < varzybos.n; i++)
  336. {
  337. int x = varzybos.n - 1 - varzybos.Imti(i).ImtiLaimejimus() - varzybos.Imti(i).ImtiLygiasias();
  338. if (x < min)
  339. {
  340. min = x;
  341. pav = varzybos.Imti(i).ImtiPav();
  342. }
  343. }
  344. return pav;
  345. }
  346. }
  347. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement