Пример #1
0
        static void IgenyekOlvas(out igeny[] igenyek, out short csapatok)
        {
            /* ELSŐ RÉSZFELADAT
             * ----------------
             * Olvassa be az igeny.txt állományban talált adatokat, s azok
             * felhasználásával oldja meg a következő feladatokat!
             */

            FileStream igeny_txt = IgenyFajlMegnyit();

            // A StreamReader objektum olvasni fogja a létrejött fájlkapcsolatot.
            StreamReader txt = new StreamReader(igeny_txt);

            // A feladatnak megfelelően beolvassuk a fejléc adatokat:
            // Első sorában a szintek száma (legfeljebb 100), a második
            // sorban a csapatok száma (legfeljebb 50), a harmadik sorban
            // pedig az igények száma (legfeljebb 100) olvasható.
            short emeletek = System.Convert.ToInt16(txt.ReadLine());

            csapatok = System.Convert.ToInt16(txt.ReadLine());
            short igenyek_szam = System.Convert.ToInt16(txt.ReadLine());

            // Létrehozunk egy, igeny típusú adatsorokat tartalmazó tömböt.
            igenyek = new igeny[igenyek_szam];

            // Majd egyesével végiglépkedve beolvasunk minden további sort a fájl végéig.
            // (Jelen pillanatban a StreamReader "mutatója" a negyedik sor elején áll.)
            // A negyedik sortól kezdve soronként egy-egy igény szerepel a jelzés sorrendjében.
            for (int i = 0; i < igenyek_szam; i++)
            {
                // Egy igény hat számból áll: az első három szám az időt adja
                // meg (óra, perc, másodpercszám sorrendben), a negyedik a csapat
                // sorszáma, az ötödik az induló-, a hatodik a célszint sorszáma.
                // Az egyes számokat pontosan egy szóköz választja el egymástól.

                // Minden egész sort beolvassuk és utána a szóközök mentén felbontva
                // feltöltjük az igényeket tartalmazó tömböt.
                string   sor    = txt.ReadLine();
                string[] elemek = sor.Split(' ');

                igenyek[i].ora       = System.Convert.ToInt16(elemek[0]);
                igenyek[i].perc      = System.Convert.ToInt16(elemek[1]);
                igenyek[i].masodperc = System.Convert.ToInt16(elemek[2]);
                igenyek[i].csapat    = System.Convert.ToInt16(elemek[3]);
                igenyek[i].honnan    = System.Convert.ToInt16(elemek[4]);
                igenyek[i].hova      = System.Convert.ToInt16(elemek[5]);
            }

            // Lezárjuk az olvasó kapcsolatot az igeny.txt fájlhoz.
            txt.Close();
            igeny_txt.Close();
        }
Пример #2
0
 static void UtolsoEmelet(ref igeny[] igenyek)
 {
     /* HARMADIK RÉSZFELADAT
      * --------------------
      * Határozza meg, hogy melyik szinten áll majd a lift az utolsó kérés teljesítését követően!
      */
     // A lift értelemszerűen az utolsó igény érkezési pontján fog állni.
     // A igenyek.GetUpperBound(0) megadja a legutolsó igény azonosítószámát a tömbben,
     // majd mi kiolvassuk az igények tömb ezen elemének a "hova" változójából a választ.
     System.Console.Write("3. feladat: A lift az utolsó igény teljesítése után a(z) ");
     System.Console.WriteLine(igenyek[igenyek.GetUpperBound(0)].hova + ". emeleten áll meg.");
 }
Пример #3
0
        static void SzintIntervallum(ref igeny[] igenyek)
        {
            /* NEGYEDIK RÉSZFELADAT
             * --------------------
             * Írja a képernyőre, hogy a megfigyelés kezdete és az
             * utolsó igény teljesítése között melyik volt a legalacsonyabb
             * és melyik a legmagasabb sorszámú szint, amelyet a lift érintett!
             */
            // Létrehozunk egy üres tömböt, amely kétszer akkora, mint amennyi igény van.
            int[] emelet_lista = new int[(int)igenyek.Length * 2];
            int i = 0;
            int em_i = 0;
            while (i < igenyek.Length)
            {
                // Amíg vannak igények, minden indulási és érkezési értéket átemelünk ebbe a tömbbe.

                // A j minden elem után nő egyet (ez az index az igényekhez),
                // az em_i pedig az emelet_lista tömbben való index, amely j-nként kettőt nő
                // (hiszen minden igény két emelet értéket ad meg).

                // A második sorban mindenképpen ++em_i -t használunk, hogy
                // az em_i előbb nőjjön 1-gyel, minthogy azt kulcsként
                // használnánk. Tehát ha az em_i 2 volt, akkor a
                // "honnan" érték a 2. helyre íródik, az em_i 1-gyel nő, és így
                // a 3. helyre írja a "hova" értéket.
                // (Vesd össze: em_i++ esetén a kettő lenne az index és csak a sor UTÁN nőne 1-gyel.)
                emelet_lista[em_i] = igenyek[i].honnan;
                emelet_lista[++em_i] = igenyek[i].hova;

                i++;
                em_i++;
            }

            // Végigmegyünk az összes emelet listáján, közben maximum- és minimumkeresést végezve.
            int maximum = emelet_lista[0];
            int minimum = emelet_lista[0];

            for (int j = 0; j < emelet_lista.Length; j++)
            {
                if (emelet_lista[j] > maximum)
                {
                    maximum = emelet_lista[j];
                }

                if (emelet_lista[j] < minimum)
                {
                    minimum = emelet_lista[j];
                }
            }

            System.Console.Write("4. feladat: A lift a(z) " + System.Convert.ToString(minimum) + ". és a(z) ");
            System.Console.WriteLine(System.Convert.ToString(maximum) + ". szintek között mozgott.");
        }
Пример #4
0
        static void Szabalytalan(ref igeny[] igenyek, short csapatok, ref List<int> csapatok_lista, out List<igeny> vizsgalt_csapat_utjai, out int vizsgalt_csapat)
        {
            /* HETEDIK RÉSZFELADAT
             * -------------------
             * Előfordul, hogy egyik vagy másik szerelőcsapat áthágja
             * a szabályokat, és egyik szintről gyalog megy a másikra.
             * (Ezt onnan tudhatjuk, hogy más emeleten igényli a liftet,
             * mint ahova korábban érkezett.) Generáljon véletlenszerűen egy
             * létező csapatsorszámot! (Ha nem jár sikerrel, dolgozzon a 3. csapattal!)
             * Határozza meg, hogy a vizsgált időszak igényei alapján lehet-e egyértelműen
             * bizonyítani, hogy ez a csapat vétett a szabályok ellen! Ha igen, akkor adja
             * meg, hogy melyik két szint közötti utat tették meg gyalog, ellenkező
             * esetben írja ki a "Nem bizonyítható szabálytalanság" szöveget!
             */
            // Készítünk egy véletlengenerátor objektumot, ez fogja majd elkészíteni a számunkat.
            Random veletlen_generator = new Random();
            vizsgalt_csapat = 0;

            // A hatodik feladatban elkészült egy lista, amely tartalmazza
            // azokat a csapatokat, amelyek NEM vették igénybe a liftet (csapatok_lista).
            // Az alábbi while ciklusban generálunk egy véletlenszerű csapat sorszámot.
            // Ha ez a generált szám egy olyan csapatra mutat, amelyik nem vette igénybe
            // a liftet, akkor újra generálunk egy másikat, és így tovább, amíg létező
            // csapatot azonosító sorszámot kapunk.
            bool csapat_letezik = false;
            while (!csapat_letezik)
            {
                vizsgalt_csapat = veletlen_generator.Next(1, csapatok);
                if (!csapatok_lista.Contains(vizsgalt_csapat))
                {
                    csapat_letezik = true;
                }
            }

            System.Console.WriteLine("7. feladat: A következő csapatot vizsgáljuk: " + System.Convert.ToString(vizsgalt_csapat) + ".");

            // Készítünk egy tömböt, amelyet feltöltünk a kiválasztott csapat összes igényével.
            vizsgalt_csapat_utjai = new List<igeny>(igenyek.Length);
            for (int i = 0; i < igenyek.Length; i++)
            {
                if (igenyek[i].csapat == vizsgalt_csapat)
                {
                    vizsgalt_csapat_utjai.Add(igenyek[i]);
                }
            }

            // Megvizsgáljuk, hogy volt-e szabálytalanság:
            // egyesével végiglépkedünk a feltöltött listán.
            // A feladat szövege szerint akkor történt szabálytalanság, ha:
            // "[a csapat] más emeleten igényli a liftet, mint ahova korábban érkezett."
            // Tehát ha bármely igény 'honnan'-ja eltér az előző 'hova'-jától,
            // akkor szabálytalanok voltak, és ezt regisztráljuk.
            bool volt_szabalytalansag = false;
            int szabalytalan_honnan = -1;
            int szabalytalan_hova = -1;

            for (int j = 1; j < vizsgalt_csapat_utjai.Count; j++)
            {
                if (vizsgalt_csapat_utjai[j].honnan != vizsgalt_csapat_utjai[j - 1].hova)
                {
                    volt_szabalytalansag = true;

                    szabalytalan_honnan = vizsgalt_csapat_utjai[j - 1].hova;
                    szabalytalan_hova = vizsgalt_csapat_utjai[j].honnan;
                }
            }

            // A vizsgálat eredményét kiírjuk a képernyőre.
            if (volt_szabalytalansag == true)
            {
                System.Console.WriteLine("Történt szabálytalanság.");
                System.Console.Write("A vizsgált csapat a következő két szint között gyalog közlekedett: ");
                System.Console.WriteLine(System.Convert.ToString(szabalytalan_honnan) + ". és " + System.Convert.ToString(szabalytalan_hova) + ".");
            }
            else
            {
                System.Console.WriteLine("Nem történt szabálytalanság.");
            }
        }
Пример #5
0
        static void NemUtazott(ref igeny[] igenyek, short csapatok, out List<int> csapatok_lista)
        {
            /* HATODIK RÉSZFELADAT
             * -------------------
             * Határozza meg, hogy mely szerelőcsapatok nem vették igénybe
             * a liftet a vizsgált intervallumban! A szerelőcsapatok sorszámát
             * egymástól egy-egy szóközzel elválasztva írja a képernyőre!
             */

            // Készítünk egy listát, amely csapatok darabszámú elemet tartalmazhat.
            csapatok_lista = new List<int>(csapatok);

            // Ezt a listát feltöltjük az összes, forrásfájl szerint létező
            // csapat számával (1-től csapatszámig).
            for (int i = 1; i <= csapatok; i++)
            {
                csapatok_lista.Add(i);
            }

            // Iterálva (végiglépkedve) az igényeket tartalmazó tömböt,
            // kitöröljük azokat a csapatokat, amelyekhez találtunk igényt.
            for (int j = 0; j < igenyek.Length; j++)
            {
                csapatok_lista.Remove(igenyek[j].csapat);
            }

            // A listát rendezzük, majd a képernyőre írjuk a megoldást.
            // (A List.ToArray() metódus egy, a lista elemével azonos
            // típusú tömböt (tehát List<int> esetén int[]-t) készít,
            // amely már iterálható a foreach{} blokkal.)
            csapatok_lista.Sort();
            System.Console.Write("6. feladat: A következő csapatok nem használták a liftet: ");
            foreach (int nem_utazott_csapat_id in csapatok_lista.ToArray())
            {
                System.Console.Write(System.Convert.ToString(nem_utazott_csapat_id) + ' ');
            }
            System.Console.WriteLine();
        }
Пример #6
0
        static void IgenyekOlvas(out igeny[] igenyek, out short csapatok)
        {
            /* ELSŐ RÉSZFELADAT
             * ----------------
             * Olvassa be az igeny.txt állományban talált adatokat, s azok
             * felhasználásával oldja meg a következő feladatokat!
             */

            FileStream igeny_txt = IgenyFajlMegnyit();

            // A StreamReader objektum olvasni fogja a létrejött fájlkapcsolatot.
            StreamReader txt = new StreamReader(igeny_txt);

            // A feladatnak megfelelően beolvassuk a fejléc adatokat:
            // Első sorában a szintek száma (legfeljebb 100), a második
            // sorban a csapatok száma (legfeljebb 50), a harmadik sorban
            // pedig az igények száma (legfeljebb 100) olvasható.
            short emeletek = System.Convert.ToInt16(txt.ReadLine());
            csapatok = System.Convert.ToInt16(txt.ReadLine());
            short igenyek_szam = System.Convert.ToInt16(txt.ReadLine());

            // Létrehozunk egy, igeny típusú adatsorokat tartalmazó tömböt.
            igenyek = new igeny[igenyek_szam];

            // Majd egyesével végiglépkedve beolvasunk minden további sort a fájl végéig.
            // (Jelen pillanatban a StreamReader "mutatója" a negyedik sor elején áll.)
            // A negyedik sortól kezdve soronként egy-egy igény szerepel a jelzés sorrendjében.
            for (int i = 0; i < igenyek_szam; i++)
            {
                // Egy igény hat számból áll: az első három szám az időt adja
                // meg (óra, perc, másodpercszám sorrendben), a negyedik a csapat
                // sorszáma, az ötödik az induló-, a hatodik a célszint sorszáma.
                // Az egyes számokat pontosan egy szóköz választja el egymástól.

                // Minden egész sort beolvassuk és utána a szóközök mentén felbontva
                // feltöltjük az igényeket tartalmazó tömböt.
                string sor = txt.ReadLine();
                string[] elemek = sor.Split(' ');

                igenyek[i].ora = System.Convert.ToInt16(elemek[0]);
                igenyek[i].perc = System.Convert.ToInt16(elemek[1]);
                igenyek[i].masodperc = System.Convert.ToInt16(elemek[2]);
                igenyek[i].csapat = System.Convert.ToInt16(elemek[3]);
                igenyek[i].honnan = System.Convert.ToInt16(elemek[4]);
                igenyek[i].hova = System.Convert.ToInt16(elemek[5]);
            }

            // Lezárjuk az olvasó kapcsolatot az igeny.txt fájlhoz.
            txt.Close();
            igeny_txt.Close();
        }
Пример #7
0
        static void FelfeleIndulasok(ref igeny[] igenyek)
        {
            /* ÖTÖDIK RÉSZFELADAT
             * ------------------
             * Határozza meg, hogy hányszor kellett a liftnek felfelé indulnia
             * utassal és hányszor utas nélkül! Az eredményt jelenítse meg a képernyőn!
             */
            // Ha a lift célállomása az adott igényen belül magasabban van,
            // mint az induló állomás, akkor az egy út felfelé utassal.
            // Azonban, ha a jelenlegi célállomás a következő igény
            // induló állomása alatt van, akkor a liftnek felelé kell mozognia,
            // tehát az egy felfelé út lesz utas nélkül.
            int felfele_utas = 0;
            int felfele_utas_nelkul = 0;
            for (int l = 0; l < igenyek.Length - 1; l++)
            {
                if (igenyek[l].honnan < igenyek[l].hova)
                {
                    felfele_utas++;
                }

                if (igenyek[l].hova < igenyek[l + 1].honnan)
                {
                    felfele_utas_nelkul++;
                }
            }

            System.Console.Write("5. feladat: A lift ennyiszer indult felfelé: utassal: ");
            System.Console.Write(System.Convert.ToString(felfele_utas) + ", utas nélkül: ");
            System.Console.WriteLine(System.Convert.ToString(felfele_utas_nelkul) + ".");
        }