01. FELADAT · FORRÁSKÓD

Parkolóautomata

Program.cs letöltése
namespace Feladat01_Parkoloautomata
{
    internal class Program
    {
        static void Main(string[] args)
        {
            const int INGYENES_PERC = 15;
            const int ORADIJ = 400;
            const int NAPI_MAXIMUM = 2500;

            Console.WriteLine("=== Parkolóautomata ===");

            Console.Write("Érkezés órája (0-23): ");
            int erkezesOra = int.Parse(Console.ReadLine());
            Console.Write("Érkezés perce (0-59): ");
            int erkezesPerc = int.Parse(Console.ReadLine());
            Console.Write("Távozás órája (0-23): ");
            int tavozasOra = int.Parse(Console.ReadLine());
            Console.Write("Távozás perce (0-59): ");
            int tavozasPerc = int.Parse(Console.ReadLine());

            int erkezes = PercekEjfeltol(erkezesOra, erkezesPerc);
            int tavozas = PercekEjfeltol(tavozasOra, tavozasPerc);

            if (tavozas <= erkezes)
            {
                Console.WriteLine("Hibás adat: a távozás nem lehet korábbi vagy azonos az érkezéssel.");
            }
            else
            {
                int idotartam = tavozas - erkezes;
                int orak = idotartam / 60;
                int percek = idotartam % 60;
                Console.WriteLine($"Parkolási idő: {orak} óra {percek} perc ({idotartam} perc)");

                int megkezdett = MegkezdettOrak(idotartam);
                int dij = Parkolasidij(idotartam, INGYENES_PERC, ORADIJ, NAPI_MAXIMUM);

                if (idotartam <= INGYENES_PERC)
                {
                    Console.WriteLine("A parkolás a türelmi időn belül volt.");
                }
                else
                {
                    Console.WriteLine($"Megkezdett órák száma: {megkezdett}");
                }

                Console.WriteLine($"Fizetendő: {dij} Ft");

                if (dij == NAPI_MAXIMUM && megkezdett * ORADIJ > NAPI_MAXIMUM)
                {
                    Console.WriteLine("A napi maximum lépett életbe.");
                }
            }
        }

        // Az éjfél óta eltelt percek száma.
        static int PercekEjfeltol(int ora, int perc)
        {
            return ora * 60 + perc;
        }

        // Felfelé kerekítés egész órára: minden megkezdett óra egész órának számít.
        static int MegkezdettOrak(int percek)
        {
            int orak = percek / 60;

            // Ha maradt még töredékperc, az már egy újabb megkezdett óra.
            if (percek % 60 > 0)
            {
                orak++;
            }

            return orak;
        }

        static int Parkolasidij(int percek, int ingyenesPerc, int oradij, int napiMaximum)
        {
            int dij;

            if (percek <= ingyenesPerc)
            {
                dij = 0;
            }
            else
            {
                dij = MegkezdettOrak(percek) * oradij;
                if (dij > napiMaximum)
                {
                    dij = napiMaximum;
                }
            }

            return dij;
        }
    }
}