2023. szeptember 15., péntek

2023.09.15. Önvezető autók megoldás

Az ellenőrzésben a virtuális metódusig jutottunk el. Akinek nem volt házija, az pótoljon.

using System;

using System.Collections.Generic;
using System.IO;

namespace autokOOP
{
    class Auto
    {
        public string Azonosito { get; set; } //property (tulajdonság/jellemző)
        //a fentit a prop tab-tab módszerrel könnyen elő lehet hívni
        //de így is lehetne egyszerűbben:
        //public string azonosito;
        public int Loero { get; set; }
        public double Tomeg { get; set; }
        public int Gyorsulas { get; set; }
        public int Beavatkozas { get; set; }

        public Auto(string sor) //konstruktor, példányosításkor automatikusan végrehajtódik
        {
            string[] atmeneti = sor.Split(';');
            this.Azonosito = atmeneti[0];
            this.Loero = Convert.ToInt32(atmeneti[1]);
            this.Tomeg = Convert.ToDouble(atmeneti[2]);
            this.Gyorsulas = Convert.ToInt32(atmeneti[3]);
            this.Beavatkozas = Convert.ToInt32(atmeneti[4]);
        }
        public override string ToString() //virtuális metódus
        {
            return $"{Azonosito,-18} | {Loero,4} lóerő | {Tomeg,4} t | {Gyorsulas,2} mp | {Beavatkozas,2}* kellett beavatkozni";
        }

        //ez így egyszerűbb:
        public void kiir()
        {
            Console.WriteLine($"{Azonosito,-18} | {Loero,4} lóerő | {Tomeg,4} t | {Gyorsulas,2} mp | {Beavatkozas,2}* kellett beavatkozni");
        }
    }
    class Program
    {
        static int leggyorsabb3(List<Auto> a)
        {
            int kiIndex = 0;
            int min = a[0].Gyorsulas;
            for (int i = 1; i < a.Count; i++)
            {
                if (min > a[i].Gyorsulas)
                {
                    min = a[i].Gyorsulas;
                    kiIndex = i;
                }
            }
            return kiIndex;
        }
        static Auto leggyorsabb3_2(List<Auto> a)
        {
            Auto min = a[0];
            for (int i = 1; i < a.Count; i++)
            {
                if (min.Gyorsulas > a[i].Gyorsulas)
                {
                    min = a[i];                  
                }
            }
            return min;
        }

        static void legkevesbeOnallo4(List<Auto> a)
        {
            int kiIndex = 0;
            int max = a[0].Beavatkozas;
            for (int i = 1; i < a.Count; i++)
            {
                if (max < a[i].Beavatkozas)
                {
                    max = a[i].Beavatkozas;
                    kiIndex = i;
                }
            }
            Console.WriteLine($"\nA legkevésbé önálló autó:\n{a[kiIndex]}");
        }

        static double atlag5(List<Auto> a)
        {
            double osszTomeg = 0;
            for (int i = 0; i < a.Count; i++)
            {
                osszTomeg += a[i].Tomeg;
            }
            return osszTomeg / a.Count;
        }
        static void Main(string[] args)
        {
            List<Auto> autok = new List<Auto>(); //példányosítás
            //2.Az adatokat olvassa be fájlból és tárolja el egy listában.
            foreach (var item in File.ReadAllLines(@"../../../autok.txt"))
            {
                autok.Add(new Auto(item));
            }

            Console.WriteLine("Kiírás 4 módszerrel\n1. kiírás\n");
            //Összes kiírása:
            foreach (var i in autok)
            {
                Console.WriteLine(i);
            }
            Console.WriteLine("\n2. kiírás");
            foreach (var i in autok)
            {
                Console.WriteLine(i.ToString());
            }
            Console.WriteLine("\n3. kiírás");
            for (int i = 0; i < autok.Count; i++)
            {
                Console.WriteLine(autok[i].ToString());
            }
            Console.WriteLine("\n4. kiírás");
            for (int i = 0; i < autok.Count; i++)
            {
                autok[i].kiir();
            }

            //3.Írja ki a képernyőre a leggyorsabb autó adatait.
            //(Az a leggyorsabb, ami a legkevesebb idő alatt gyorsul 100 ra.)
            //A feladatot függvénnyel kell megoldani.
            Console.WriteLine($"\nLeggyorsabb autó többféle módszerrel:");
            int index = leggyorsabb3(autok);
            Console.WriteLine($"\nLeggyorsabb autó:\n{autok[index]}"); //virtuális metódussal
            Console.WriteLine($"\nLeggyorsabb autó:\n{autok[leggyorsabb3(autok)]}");
            autok[index].kiir();

            Console.WriteLine($"\nLeggyorsabb autó:\n{leggyorsabb3_2(autok)}");



            //4.Írja ki a képernyőre a minta szerint a legkevésbé önálló autó azonosítóját.

            legkevesbeOnallo4(autok);

            //6.Írja ki a képernyőre az autók átlag tömegét, függvénnyel.
            Console.WriteLine("Az autók átlag tömege: {0:0.00}", atlag5(autok));
            Console.WriteLine("Az autók átlag tömege once more: {0}", Math.Round(atlag5(autok), 2));

            //7.Írja ki a képernyőre, és egy új fájlba autónként a következő adatokat szóközzel elválasztva:
            //sorszám(a feldolgozás sorrendjében automatikusan generált), tömeg kg-ban. (1 tonna = 1000 kg).

            Console.WriteLine("Fájlba írás 1. verzió");
            List<string> ki = new List<string>();
            for (int i = 0; i < autok.Count; i++)
            {
                ki.Add($"{i + 1}. {autok[i].Tomeg * 1000} kg");
                Console.WriteLine(ki[i]);
            }
            File.WriteAllLines("tomeg1.txt", ki);

            Console.WriteLine("Fájlba írás 2. verzió");
            StreamWriter sw = new StreamWriter("tomeg2.txt");
            string kiirando = string.Empty;
            for (int i = 0; i < autok.Count; i++)
            {
                kiirando = $"{i + 1}. {autok[i].Tomeg * 1000} kg";
                //egyszerűbben:
                //kiirando = i + 1 + ". " + autok[i].tomeg * 1000 + " kg";
                sw.WriteLine(kiirando);
                Console.WriteLine(kiirando);
            }
            sw.Close();
            Console.Write($"\nA program bezárásához nyomjon meg egy billentyűt...");
            Console.ReadKey();
        }
    }
}

2024.04.25. Időjárás app

 Feladat: Időjárás app - OOP módszerekkel, haladóknak adatkötéssel Az alkalmazás célja, hogy a felhasználók hozzáadjanak és eltávolítsanak v...