2023.10.12. Önvezető autók finomított megoldás, kis LINQ-val

 using System;

using System.Collections.Generic;
using System.IO;
using System.Linq;
/// <summary>
/// Az Önvezető autók feladat megoldása
/// feladatonként több megoldás, metódussal/függvénnyel
/// fájlkezelés kétféleképpen
/// LINQ megoldások
/// </summary>

namespace OnvezetoOOP
{
    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 Auto Leggyorsabb3_3(List<Auto> autok)
        {
            return autok.OrderBy(a => a.Gyorsulas).First();
        }

        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($"\n{a[kiIndex].Azonosito}");
        }

        static Auto LegkevesbeOnallo4_2(List<Auto> autok)
        {
            return autok.OrderByDescending(a => a.Beavatkozas).First();
        }

        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 double Atlag5_2(List<Auto> autok)
        {
            return autok.Average(a => a.Tomeg);
        }
       
        static void FajlbaIras(List<Auto> autok)
        {
            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);
        }
       
        static void FaljlbaIras2(List<Auto> autok)
        {
            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";
                //másképp:
                //kiirando = i + 1 + ". " + autok[i].tomeg * 1000 + " kg";
                sw.WriteLine(kiirando);
                Console.WriteLine(kiirando);
            }
            sw.Close();
        }

        static void FajlbaIras3(List<Auto> autok, string fajlnev)
        {
            var sorok = autok.Select((a, b) => $"{b + 1}. {a.Tomeg * 1000} kg");
            foreach (var item in sorok)
            {
                Console.WriteLine(item);
            }
            File.WriteAllLines(fajlnev, sorok);
        }
       
       
        static void Main(string[] args)
        {
            List<Auto> autok = new List<Auto>();
            //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ó:");
            int index = Leggyorsabb3(autok);
            Console.WriteLine($"\n{autok[index]}");

            Console.WriteLine($"\n{autok[Leggyorsabb3(autok)]}");

            autok[index].kiir();
            Console.WriteLine($"\n{Leggyorsabb3_2(autok)}");

            Auto leggyorsabb = Leggyorsabb3_3(autok);
            leggyorsabb.kiir();

            //4.Írja ki a képernyőre a legkevésbé önálló autó azonosítóját.
            Console.WriteLine("\nLegkevésbé önálló autó:");
            LegkevesbeOnallo4(autok);

            Auto legkevesbeOnallo = LegkevesbeOnallo4_2(autok);
            Console.WriteLine(legkevesbeOnallo.Azonosito);

            //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:");
            Console.WriteLine("{0:0.00}", Atlag5(autok));
            Console.WriteLine(Math.Round(Atlag5(autok), 2));
            Console.WriteLine("{0:0.00}", Atlag5_2(autok));

            //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).

            FajlbaIras(autok);
            Console.WriteLine("Fájlba írás 1. verzió kész");

            FaljlbaIras2(autok);
            Console.WriteLine("Fájlba írás 2. verzió kész");

            FajlbaIras3(autok, "tomeg3.txt");
            Console.WriteLine("Fájlba írás 3. verzió kész");

            Console.Write($"\nA program bezárásához nyomjon meg egy billentyűt...");
            Console.ReadKey();
        }
    }
}


using System;

namespace OnvezetoOOP
{
    class Auto
    {
        private string azonosito;

        public string Azonosito { get => azonosito; private set => azonosito = value; } //property (tulajdonság/jellemző)
        //a fentit a prop tab-tab módszerrel könnyen elő lehet hívni
        //ez a legyegyszerűbb, de nem OOP-s, ne használd:
        //public string azonosito; egyszerű adatmező, és nincs hozzá property

        public int Loero { get; private set; }
        public double Tomeg { get; private set; }
        public int Gyorsulas { get; private set; }
        public int Beavatkozas { get; private 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");
        }
    }
}


Tesla Model S P90D;760;2,20;3;3 Volvo XC90;889;2,90;4;14 Volkswagen GO989;1378;3,66;5;6 Audi Q525;772;2,40;2;3 Mercedes Benz898;739;2,20;3;9 Google Drive 18;752;2,55;4;11 Delphi Magic 428B;1194;3,00;3;4 Bosch Doom300;700;2,09;4;6 Nissan Cherry 100;725;3,1;3;7

2024.02.15.-16. Helyettesítés

 Adatbázis: vizsgaremek adatbázisának befejezése teljesen készre, dokumentáció kiegészítése, befejezése. Vizsgaremek felületének megvalósítá...