• Zadání: Deklarujte nestatickou třídu Auto v rámci jmenného prostoru Trida, která bude obsahovat následující nestatické datové složky:
    • pocetKol – počet kol auta (konstantní volně přístupný atribut)
    • kapacitaNadrze – kapacita nádrže auta (pouze pro čtení)
    • sPZ – státní poznávací značka auta
    • stavNadrze – aktuální stav objemu paliva v nádrži auta
    • ujetoKm – aktuální stav počtu ujetých kilometrů
    • spotreba – průměrná spotřeba litrů paliva na 100 km

Deklarujte statickou celočíselnou datovou složku delkaGrafUkazatele. Deklarujte veřejnou metodu bez návratu s názvem UjedTrasu ve třídě Auto, která simuluje jízdu auta. Tato metoda přijímá jako vstupní reálný formální parametr pocetKm, který vyjadřuje počet km, které má auto ujet. V rámci této metody je volána další metoda SpotrebujPalivo, která zajistí spotřebu paliva pro jízdu auta (datová složka stavNadrze). Je zároveň nutné zvýšit počet ujetých kilometrů auta (datová složka ujetoKm). Deklarujte metodu StavNadrzeGraficky pro zobrazení grafického prvku, který ukazuje aktuální stav paliva v nádrži (návrat metody ve formě textového řetězce). Grafický ukazatel stavu paliva budou reprezentovat znaky "#" uzavřené v hranatých závorkách. Vytvořte novou instanci třídy autoOctavia nestatické třídy Auto pomocí vlastního konstruktoru. Konstruktor bude přijímat jako formální parametry kapacitaNadrze, stavNadrze, spotreba (datové typy těchto parametrů jsou shodné s datovými typy datových složek třídy Auto). Nastavte délku grafického ukazatele paliva (nádrž je plná) na 20 znaků. Počáteční stav najetých km (najetoKm) je 0. V hlavní metodě vytvořte instanci třídy Auto s názvem autoOctavia se skutečnými parametry 55, 50, 0 (kapacitaNadrze, stavNadrze, spotreba). Vypište v Main kapacitu nádrže, stav ujetých km, objem nádrže a zobrazte objem nádrže pomocí grafického prvku. Ujeďte s autem 100 km a proveďte znovu všechny výpisy

  • Řešení:
//Deklarace třídy
namespace Trida
{
    //Deklarace třídy 'Auto'
    class Auto
    {
        //Značka začátku oblasti s datovými složkami
        #region Deklarace datových složek třídy
 
        //Deklarace konstantní datové složky
        public const int pocetKol = 4;
        //Deklarace datové složky pouze pro čtení
        readonly double kapacitaNadrze = 60;
        //Deklarace privátních datových složek
        string sPZ;
        double stavNadrze;
        double ujetoKm;
        double spotreba;
 
        //Deklarace statické datové složky
        static int delkaGrafUkazatele;
 
        //Značka konce oblasti s datovými složkami
        #endregion
            
 
        //Deklarace veřejné metody pro ujetí určité trasy
        public void UjedTrasu(double pocetKm)
        {
            //Volání metody pro spotřebu paliva
            this.SpotrebujPalivo(pocetKm);
            //Zvýšení celkového počtu ujetých kilometrů
            this.ujetoKm += pocetKm;
        }
 
        //Deklarace vlastního konstruktoru třídy
        public Auto(double kapacitaNadrze, double stavNadrze, double spotreba)
        {
            //Inicializace soukromých datových složek
            this.stavNadrze = stavNadrze;
            this.ujetoKm = 0;
            this.spotreba = spotreba;
            //Inicializace statické datové složky
            delkaGrafUkazatele = 20;
            //Inicilazace datové složky (readonly) pomocí parametru
            this.kapacitaNadrze = kapacitaNadrze;
        }
 
        //Deklarace soukromé metody pro výpočet spotřeby a snížení množství paliva
        private void SpotrebujPalivo(double pocetKm)
        {
            //Výpočet spotřebovaného paliva 
            double spotrebovanePalivo = pocetKm / 100 * this.spotreba;
            //Odebrání spotřebovaného paliva z nádrže
            this.stavNadrze -= spotrebovanePalivo;
        }
 
        //Deklarace veřejné metody pro grafiku zobrazující aktuální stav paliva v nádrži
        public string StavNadrzeGraficky()
        {
            //Deklarace grafického výstupu - textový řetězec - počátek hranaté závorky
            string grafickyUkazatel = "[";
            /*Výpočet procentruálního objemu paliva v nádrži a výpočet počtu dílků 
             * v grafickém ukazateli, tj. počet znaků # uvnitř hranaté závorky*/
            double pocetDilku = Math.Round((this.stavNadrze / this.kapacitaNadrze) *
                Auto.delkaGrafUkazatele);
            //Cyklus na připojení znaků do grafického výstupu
            for (int i = 0; i < pocetDilku; i++)
                grafickyUkazatel += "#";
            //Doplnění mezer do celkové délky grafického ukazatele
            grafickyUkazatel = grafickyUkazatel.PadRight(Auto.delkaGrafUkazatele + 1);
            //Návrat grafického textového ukazatele stavu paliva v nádrži 
            return (grafickyUkazatel += "]");
        }
 
 
        //Deklarace hlavní metody
        static void Main(string[] args)
        {
            /*Vytvoření instance třídy Auto pomocí volání vlastního konstruktoru
             * včetně předání skutečného parametru*/
            Auto autoOctavia = new Auto(55, 50, 5);
            Console.WriteLine("Kapacita nádrže: {0}", autoOctavia.kapacitaNadrze);
            Console.WriteLine("Ujeto km: {0}", autoOctavia.ujetoKm);
            Console.WriteLine("Stav nádrže: {0}", autoOctavia.stavNadrze);
            Console.WriteLine("Stav nádrže: {0}", autoOctavia.StavNadrzeGraficky());
            autoOctavia.UjedTrasu(100);
            Console.WriteLine("Auto Octavia:");
            Console.WriteLine("Ujeto km: {0}", autoOctavia.ujetoKm);
            Console.WriteLine("Stav nádrže: {0}", autoOctavia.stavNadrze);
            Console.WriteLine("Stav nádrže: {0}", autoOctavia.StavNadrzeGraficky());
            //Čekání na stisk klávesy -> ukončení programu
            Console.ReadKey();
        }
    }
}
  • Výstup programu:

Kapacita nádrže: 55
Ujeto km: 0
Stav nádrže: 50
Stav nádrže: [##################  ]
Auto Octavia:
Ujeto km: 100
Stav nádrže: 45
Stav nádrže: [################    ]

Última modificación: martes, 4 de febrero de 2020, 23:29