Advertisement
Levi0227

Menetrend-2020 május (idegen)

Apr 5th, 2023 (edited)
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 16.02 KB | Source Code | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using System.Collections;
  8.  
  9.  
  10. namespace ConsoleApp3
  11. {
  12.     class Program
  13.     {
  14.         struct vonat
  15.         {
  16.             public int vonat_ID;  //vonat az
  17.             public int allomas_ID;
  18.             public int ora;
  19.             public int perc;
  20.             public bool inerk; //Indul=true Erk=false
  21.  
  22.         }
  23.         struct vonathol
  24.         {
  25.             public int allomasID_hol; //állomásazonosito
  26.             public int indul_hol; //indulási idő
  27.             public int erkez_hol; //
  28.  
  29.         }
  30.  
  31.         static void Main(string[] args)
  32.         {
  33.  
  34.             vonat[] adat = new vonat[1000]; //ebben rögzitjük az összes adatot
  35.             int szamol = 0;//adatsorok száma
  36.  
  37.             string[] adatsor = new string[6]; //szétvágáshoz
  38.             StreamReader sr = new StreamReader("vonat.txt");
  39.  
  40.             while (!sr.EndOfStream)
  41.             {
  42.  
  43.                 adatsor = sr.ReadLine().Split('\t');
  44.                 adat[szamol].vonat_ID = int.Parse(adatsor[0]);
  45.                 adat[szamol].allomas_ID = int.Parse(adatsor[1]);
  46.                 adat[szamol].ora = int.Parse(adatsor[2]);
  47.                 adat[szamol].perc = int.Parse(adatsor[3]);
  48.                 adat[szamol].inerk = false;
  49.                 if (adatsor[4] == "I")
  50.                 {
  51.                     adat[szamol].inerk = true;
  52.                 }
  53.                 szamol++;
  54.             }
  55.             sr.Close();
  56.  
  57.             //2.Feladat
  58.             Console.WriteLine("2.Feladat: ");
  59.             int vonatmax = int.MinValue;
  60.             int allomasmax = int.MinValue;
  61.  
  62.             for (int i = 0; i <= szamol; i++)
  63.             {
  64.                 if (adat[i].vonat_ID > vonatmax)
  65.                 {
  66.                     vonatmax = adat[i].vonat_ID;
  67.                 }
  68.  
  69.                 if (adat[i].allomas_ID > allomasmax)
  70.                 {
  71.                     allomasmax = adat[i].allomas_ID;
  72.                 }
  73.             }
  74.             Console.WriteLine("Az állomások száma: {0}\nA vonatok száma: {1}", allomasmax, vonatmax);
  75.  
  76.             //3.feladat
  77.             Console.WriteLine("\n3.Feladat:");
  78.             int[] varmax = new int[vonatmax + 1]; //vontonkénti max várakozási idő
  79.             int[] allmax = new int[vonatmax + 1]; //itt várt a legtöbbet
  80.             int[] maxvonat = new int[vonatmax + 1]; // ez a vonat volt az
  81.             int erkezes = 0, indulas = 0, varakoz = 0;
  82.             for (int i = 0; i <= vonatmax; i++)
  83.             {
  84.                 varmax[i] = 0;
  85.                 for (int j = 0; j < szamol; j++)
  86.                 {
  87.  
  88.                     if ((adat[j].inerk == false) || (adat[j].allomas_ID == 0)) //le kell kezelni, mert a 0. állomásra nem érkezik vonat
  89.                     {
  90.                         erkezes = adat[j].ora * 60 + adat[j].perc;
  91.  
  92.                     }
  93.                     else
  94.                     {
  95.                         indulas = adat[j].ora * 60 + adat[j].perc;
  96.                         varakoz = indulas - erkezes;
  97.                         if (varakoz > varmax[i])
  98.                         {
  99.                             varmax[i] = varakoz;
  100.                             allmax[i] = adat[j].allomas_ID;
  101.                             maxvonat[i] = adat[j].vonat_ID;
  102.                         }
  103.  
  104.                     }
  105.                 }
  106.             }
  107.             int megoldas = varmax.Max(); //legnagyobb várakozási idő
  108.             int i3 = 1;
  109.             bool megvan = false;
  110.  
  111.             while (megvan == false)
  112.             {
  113.  
  114.                 if (megoldas == varmax[i3])
  115.                 {
  116.                     Console.WriteLine("A(z) {0}. vonat a(z) {1}. állomáson {2} percet állt", maxvonat[i3], allmax[i3], megoldas);
  117.                     megvan = true;
  118.                 }
  119.  
  120.             }
  121.             //4.feladat
  122.             Console.WriteLine("\n4. Feladat:");
  123.             Console.Write("Adja meg a vonat azonosítóját!");
  124.             string s4 = Console.ReadLine();
  125.             vonat bekertvonat;
  126.             bekertvonat.vonat_ID = int.Parse(s4);
  127.             Console.Write("Adjon meg egy időpontot (óra perc!");
  128.             s4 = Console.ReadLine();
  129.             string[] bonto = new string[2];
  130.             bonto = s4.Split(' ');
  131.             bekertvonat.ora = int.Parse(bonto[0]);
  132.             bekertvonat.perc = int.Parse(bonto[1]);
  133.  
  134.  
  135.             ////5. feladat
  136.  
  137.             Console.WriteLine("\n5.feladat: ");
  138.  
  139.             int indult = 0; //ekkor indult
  140.             int erkezett = 0; //ekkor érketztett
  141.  
  142.             int i5 = 1;
  143.             do
  144.             {
  145.                 if (bekertvonat.vonat_ID == adat[i5].vonat_ID)
  146.                 {
  147.                     indult = adat[i5].ora * 60 + adat[i5].perc;
  148.                 }
  149.                 i5++;
  150.  
  151.             } while (indult == 0);
  152.             do
  153.             {  //keresett vonat az állomásra érkezett
  154.                 if ((bekertvonat.vonat_ID == adat[i5].vonat_ID) && (adat[i5].allomas_ID == allomasmax))
  155.                 {
  156.                     erkezett = adat[i5].ora * 60 + adat[i5].perc;
  157.  
  158.                 }
  159.                 i5++;
  160.             } while (i5 < szamol);
  161.  
  162.             //teljes út hossza
  163.  
  164.             int uthossza = erkezett - indult;
  165.  
  166.  
  167.             if (uthossza > 142)
  168.             {
  169.                 Console.WriteLine("A(z) {0}. vonat útja {1} perccel hosszabb volt azt előírtnál.", bekertvonat.vonat_ID, uthossza - 142);
  170.  
  171.             }
  172.             if (uthossza < 142)
  173.             {
  174.                 Console.WriteLine("A(z) {0}. vonat útja {1} perccel rövidebb volt azt előírtnál.", bekertvonat.vonat_ID, 142 - uthossza);
  175.             }
  176.             if (uthossza == 142)
  177.             {
  178.                 Console.WriteLine("A(z) {0}. vonat útja pontosan megegyezik az előírttal.", bekertvonat.vonat_ID);
  179.             }
  180.  
  181.  
  182.             //6. feladat
  183.  
  184.             Console.WriteLine("\n6.Feladat:");
  185.             string filenev = "halad";
  186.             filenev += bekertvonat.vonat_ID;
  187.             filenev += ".txt";
  188.             StreamWriter sw = new StreamWriter(filenev);
  189.             for (int i = 1; i <= szamol; i++)
  190.             {
  191.                 if ((adat[i].vonat_ID == bekertvonat.vonat_ID) && (adat[i].inerk == false))
  192.                 {
  193.                     sw.Write("{0}. állomás: {1}:{2}\n", adat[i].allomas_ID, adat[i].ora, adat[i].perc);
  194.  
  195.  
  196.                 }
  197.  
  198.             }
  199.             sw.Close();
  200.             Console.WriteLine("{0} elkészült", filenev);
  201.  
  202.             //7. feladat
  203.             Console.WriteLine("7. feladat: ");
  204.             //struct fent
  205.  
  206.             int vizsgalt7 = bekertvonat.ora * 60 + bekertvonat.perc;          //Ez a vizsgált időpont
  207.             vonathol[] sz = new vonathol[vonatmax + 1];
  208.             for (int j = 1; j <= vonatmax; j++)
  209.             {
  210.                 for (int i = 1; i <= szamol; i++)
  211.                 {
  212.                     if ((adat[i].inerk == true) && (adat[i].vonat_ID == j))           //A megfelelő vonat indul
  213.                     {
  214.                         sz[adat[i].allomas_ID].allomasID_hol = adat[i].allomas_ID;
  215.                         sz[adat[i].allomas_ID].indul_hol = adat[i].ora * 60 + adat[i].perc;
  216.                     }
  217.                     if ((adat[i].inerk == false) && (adat[i].vonat_ID == j))            //A megfelelő vonat érkezik
  218.                     {
  219.                         sz[adat[i].allomas_ID].allomasID_hol = adat[i].allomas_ID;
  220.                         sz[adat[i].allomas_ID].erkez_hol = adat[i].ora * 60 + adat[i].perc;
  221.                     }
  222.                 }
  223.                 //for (int i = 1; i <allmax; i++)
  224.                 //{ Console.WriteLine("{0}. állomás. Indul: {1} Érkezik: {2} - VONAT: {3}",i,sz[i].indul,sz[i].erkez,j); }
  225.                 //Csak tesztre!
  226.                 for (int i = 1; i < allomasmax; i++)
  227.                 {
  228.                     if ((vizsgalt7 <= sz[i].indul_hol) && (vizsgalt7 >= sz[i].erkez_hol))
  229.                     {
  230.                         Console.WriteLine("A(z) {0}. vonat a {1}. állomáson állt. ", j, i);
  231.                     }
  232.                     if ((vizsgalt7 > sz[i].indul_hol) && (vizsgalt7 < sz[i + 1].erkez_hol))
  233.                     {
  234.                         Console.WriteLine("A(z) {0}. vonat a {1}. és a {2}. állomás között járt.", j, i, i + 1);
  235.                     }
  236.                 }
  237.             }
  238.  
  239.         }
  240.     }
  241.  
  242. }
  243. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  244. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  245. //////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  246. using System;
  247. using System.Collections.Generic;
  248. using System.IO;
  249.  
  250. namespace menetrend
  251. {
  252.     class All
  253.     {
  254.         public int VonatID { get; set; }
  255.         public int AllomasID { get; set; }
  256.         public int ErkOra { get; set; }
  257.         public int ErkPerc { get; set; }
  258.         public int IndOra { get; set; }
  259.         public int IndPerc { get; set; }
  260.         public int Var { get; set; }
  261.         public All(int vID, int aID, int ora, int perc)
  262.         {
  263.             VonatID = vID;
  264.             AllomasID = aID;
  265.             ErkOra = ora;
  266.             ErkPerc = perc;
  267.             IndOra = IndPerc = -1;
  268.             Var = 0;
  269.         }
  270.     }
  271.  
  272.     class Program
  273.     {
  274.         static void Main(string[] args)
  275.         {
  276.             StreamReader sr = new StreamReader("vonat.txt");
  277.             List<All> allas = new List<All>();
  278.             int vonatDB = -1;
  279.             int allomasDB = -1;
  280.             while (!sr.EndOfStream)
  281.             {
  282.                 string[] adatsor = sr.ReadLine().Split();
  283.                 int vonatID = int.Parse(adatsor[0]);
  284.                 int allomasID = int.Parse(adatsor[1]);
  285.                 int ora = int.Parse(adatsor[2]);
  286.                 int perc = int.Parse(adatsor[3]);
  287.                 if (adatsor[4] == "E")
  288.                     //létrehozás
  289.                     allas.Add(new All(vonatID, allomasID, ora, perc));
  290.                 else //indul
  291.                 {
  292.                     if (allomasID == 0)
  293.                     {
  294.                         allas.Add(new All(vonatID, allomasID, -1, -1));
  295.                     }
  296.                     //kiválasztás (tudjuk, hogy megérkezett!)
  297.                     int melyik = allas.Count-1; //így az első amit megnéz az éppen létrehozott
  298.                     while (!(vonatID == allas[melyik].VonatID && allomasID == allas[melyik].AllomasID))
  299.                     {
  300.                         melyik--;
  301.                     }
  302.                     //módosítás
  303.                     allas[melyik].IndOra = ora;
  304.                     allas[melyik].IndPerc = perc;
  305.                     allas[melyik].Var = (allas[melyik].ErkOra == -1) ? 0
  306.                                         :(allas[melyik].IndOra * 60 + allas[melyik].IndPerc - (allas[melyik].ErkOra * 60 + allas[melyik].ErkPerc));
  307.                 }
  308.                 if (vonatID>vonatDB)
  309.                 {
  310.                     vonatDB = vonatID;
  311.                 }
  312.                 if (allomasID>allomasDB)
  313.                 {
  314.                     allomasDB = allomasID;
  315.                 }
  316.             }
  317.             sr.Close();
  318.  
  319.             Console.WriteLine("2. feladat");
  320.             Console.WriteLine("Az állomások száma: {0}", allomasDB+1);
  321.             Console.WriteLine("A vonatok száma: {0}", vonatDB);
  322.  
  323.             Console.WriteLine("3. feladat");
  324.             //max. kiválasztás
  325.             int maxh = 0;
  326.             for (int i = 1; i < allas.Count; i++)
  327.             {
  328.                 if (allas[maxh].Var < allas[i].Var)
  329.                 {
  330.                     maxh = i;
  331.                 }
  332.             }
  333.             Console.WriteLine("A(z) {0}. vonat a(z) {1}. állomáson {2} percet állt.", allas[maxh].VonatID, allas[maxh].AllomasID, allas[maxh].Var);
  334.  
  335.  
  336.             Console.WriteLine("4. feladat");
  337.             Console.Write("Adja meg egy vonat azonosítóját! ");
  338.             int vAzon = int.Parse(Console.ReadLine());
  339.             Console.Write("Adjon meg egy időpontot(óra perc)! ");
  340.             string[] most = Console.ReadLine().Split(' ');
  341.             int idoMost = int.Parse(most[0]) * 60 + int.Parse(most[1]);
  342.  
  343.             #region 5-7. feladat előfeldolgozás
  344.            
  345.             //5. feladathoz első indulás és utolsó érkezés kigyűjtése
  346.             int eloirtido = 2 * 60 + 22;
  347.  
  348.             //6. feladathoz adott vonat menetrendjének kigyűjtése fájlba
  349.             StreamWriter sw = new StreamWriter("halad" + vAzon.ToString() + ".txt");
  350.  
  351.             //7. feladathoz minden vonat menetrendjének elkészítése
  352.             List<All>[] menetrend = new List<All>[vonatDB + 1];
  353.             for (int i = 1; i <= vonatDB; i++)
  354.             {
  355.                 menetrend[i] = new List<All>();
  356.             }
  357.  
  358.             int menetido = 0;
  359.             for (int i = 0; i < allas.Count; i++)
  360.             {
  361.                 menetrend[allas[i].VonatID].Add(allas[i]); //7. feladathoz minden megállásra
  362.  
  363.                 if (allas[i].VonatID == vAzon) //ez a vonat
  364.                 {
  365.                     if (allas[i].ErkOra != -1) //nem induló állomás
  366.                     {
  367.                         sw.WriteLine("{0}. állomás: {1}:{2}", allas[i].AllomasID, allas[i].ErkOra, allas[i].ErkPerc); //6. feladat
  368.                        
  369.                         if (allas[i].IndOra == -1) //végállomás, nem megy tovább
  370.                         {
  371.                             menetido += (allas[i].ErkOra * 60 + allas[i].ErkPerc); //5. feladathoz
  372.                         }
  373.                     }
  374.                     else //induló állomás
  375.                     {
  376.                         menetido -= (allas[i].IndOra * 60 + allas[i].IndPerc); //5. feladathoz
  377.                     }
  378.                 }
  379.             }
  380.             sw.Close();
  381.             #endregion
  382.  
  383.             Console.WriteLine("5. feladat");
  384.             Console.Write("A(z) {0}. vonat útja ", vAzon);
  385.             if (menetido < eloirtido)
  386.             {
  387.                 Console.WriteLine("{0} perccel rövidebb volt az előírtnál.", eloirtido-menetido);
  388.             }
  389.             else if (menetido > eloirtido)
  390.             {
  391.                 Console.WriteLine("{0} perccel hosszabb volt az előírtnál.", menetido-eloirtido);
  392.             }
  393.             else
  394.             {
  395.                 Console.WriteLine("pontosan az előírt ideig tartott.");
  396.             }
  397.  
  398.             Console.WriteLine("7. feladat");
  399.  
  400.             for (int v = 1; v <=vonatDB; v++)
  401.             {
  402.                 int start = menetrend[v][0].IndOra * 60 + menetrend[v][0].IndPerc;
  403.                 int cel = menetrend[v][menetrend[v].Count - 1].ErkOra * 60 + menetrend[v][menetrend[v].Count - 1].ErkPerc;
  404.                 if ( start < idoMost && idoMost < cel)
  405.                 {
  406.                     //első időn túli indulás keresése
  407.                     int jovo = 0;
  408.                     while (menetrend[v][jovo].IndOra != -1 && menetrend[v][jovo].IndOra * 60 + menetrend[v][jovo].IndPerc < idoMost)
  409.                     {
  410.                         jovo++;
  411.                     }
  412.                     //indulási idő >= idoMost vagy végállomás
  413.                     if (menetrend[v][jovo].ErkOra * 60 + menetrend[v][jovo].ErkPerc <= idoMost) //állomásra érkezés <= időMost
  414.                     {
  415.                         Console.WriteLine("A(z) {0}. vonat a {1}. állomáson állt.", v, menetrend[v][jovo].AllomasID );
  416.                     }
  417.                     else //állomásra érkezés > időMost, de az előző állomásról elindult (előzőind < idoMost, mert a ciklus ott nem állt le)
  418.                     {
  419.                         Console.WriteLine("A(z) {0}. vonat a {1}. és a {2}. állomás között járt.", v, menetrend[v][jovo - 1].AllomasID, menetrend[v][jovo].AllomasID);
  420.                     }
  421.                 }
  422.             }
  423.             Console.ReadLine();
  424.         }
  425.     }
  426. }
  427.  
  428.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement