using System; using System.Collections.Generic; using System.Data; using System.IO; using System.Linq; using System.Runtime.Remoting.Messaging; using System.Text; using System.Threading.Tasks; namespace ConsoleApp1 { public class PL { string name; int P1, P2, P3; public PL() { name = ""; P1 = P2 = P3 = -1; } public PL(string name, int p1, int p2, int p3) { this.name = name; P1 = p1; P2 = p2; P3 = p3; } public string getName() { return name; } public int getP1() { return P1; } public int getP2() { return P2; } public int getP3() { return P3; } public void setName(string name) { if (name == null) { Console.WriteLine("No name passed!"); return; } this.name = name; } public void setP1(int p1) { if (p1 < 0) { Console.WriteLine("P1 is negative"); return; } P1 = p1; } public void setP2(int p2) { if (p2 < 0) { Console.WriteLine("P2 is negative"); return; } P2 = p2; } public void setP3(int p3) { if (p3 < 0) { Console.WriteLine("P3 is negative"); return; } P3 = p3; } } internal class Program { static void Read(string filename, PL[] PLS, ref int n) { string line; using (StreamReader reader = new StreamReader(filename)) { while ((line = reader.ReadLine()) != null) { string[] parts = line.Split(';'); string name = parts[0].Trim(); int P1 = int.Parse(parts[1].Trim()); int P2 = int.Parse(parts[2].Trim()); int P3 = int.Parse(parts[3].Trim()); PLS[n] = new PL(name, P1, P2, P3); n++; } } } static void Print(string filename, string note, PL[] PLS, int n) { using (StreamWriter writer = new StreamWriter(filename, true)) { writer.WriteLine(note); writer.WriteLine(new string('-', 50)); writer.WriteLine("| Name | P1 | P2 | P3 |"); writer.WriteLine(new string('-', 50)); for (int i = 0; i < n; i++) writer.WriteLine("{0, -8} {1, -4} {2, -4} {3, -4}", PLS[i].getName(), PLS[i].getP1(), PLS[i].getP2(), PLS[i].getP3()); writer.WriteLine(new string('-', 50)); } } static int FindPrizeWinner(PL[] PLS, int n, int position) { int ind = -1; for (int i=0; i < n; i++) if (PLS[i].getP1() <= position && PLS[i].getP2() <= position && PLS[i].getP3() <= position) ind = i; return ind; } static void CreateCollection(PL[] PLS, int n, PL[] NewC, ref int newn, PL Last) { for (int i=0; i < n; i++) if (PLS[i].getP1() < Last.getP1()) NewC[newn++] = new PL(PLS[i].getName(), PLS[i].getP1(), PLS[i].getP2(), PLS[i].getP3()); // -> for deep copy // NewC[newn++] = PLS[i]; -> for shallow copy } static void Main(string[] args) { const int maxSize = 100; const string fd = "ProgrammingLanguages.txt"; const string fr = "Results.txt"; if (File.Exists(fr)) File.Delete(fr); int n = 0; PL[] PLS = new PL[maxSize]; Read(fd, PLS, ref n); Print(fr, "Initial data:", PLS, n); int position; Console.WriteLine("Enter position:"); position = int.Parse(Console.ReadLine().Trim()); int prizeWinnerInd = FindPrizeWinner(PLS, n, position); int newn = 0; PL[] newC = new PL[maxSize]; PL Last = PLS[n - 1]; CreateCollection(PLS, n, newC, ref newn, Last); using (StreamWriter writer = new StreamWriter(fr, true)) { writer.WriteLine("\n"); writer.WriteLine("{0, -8} {1, -4} {2, -4} {3, -4}", PLS[prizeWinnerInd].getName(), PLS[prizeWinnerInd].getP1(), PLS[prizeWinnerInd].getP2(), PLS[prizeWinnerInd].getP3()); writer.WriteLine("\n"); } Print(fr, "New collection:", newC, newn); } } }