2021. január 20., szerda

2021.01.20. Az Önvezető autók program OOP változata - full OOP mintaprogram!

Ezt elkezdtük átnézni.

Önvezető autók

Napjainkban az önvezető autók egyre gyorsabban fejlődnek, több neves cég is fejleszt ilyeneket. Ebben a feladatban a rájuk vonatkozó adatokat kell feldolgoznia.
Az adatokat a lenti keretben találja. Az állomány soronként tartalmazza az autók következő adatait egymástól pontosvesszővel elválasztva: 
- azonosító (gyártó és modellszám)
- teljesítmény (lóerő)
- tömeg (tonna)
- gyorsulás (hány másodperc alatt gyorsul 100 km/h-ra)
- a vezetőnek hányszor kellett beavatkozni a vezetésbe 10.000 km-en 
A fájlban 9 autó adatai vannak. Készülj fel arra, hogy több autó adatai is szerepelhetnek. 

 

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

 Például a Tesla Model S P90D autó 760 lóerős teljesítményű, 2,2 tonna tömegű, 3 másodperc alatt gyorsul 100 km/órára és a 10.000 km-es tesztvezetésen 3-szor volt szükség humán beavatkozásra. 

1. Készítsen programot a következő feladatok megoldására, amelynek a forráskódját onvezeto néven mentse el.

A képernyőre írást igénylő részfeladatok megjelenítése előtt írja a képernyőre a feladat sorszámát! 

2. Az adatokat olvassa be fájlból és tárolja el egy struktúra adatszerkezeteket tartalmazó tömbben. 

3. Írja ki a képernyőre a minta szerint a leggyorsabb autó adatait. (Az a leggyorsabb, ami a legkevesebb idő alatt gyorsul 100‑ra.) 

4. Írja ki a képernyőre a minta szerint a legkevésbé önálló autó azonosítóját. (Az a legkevésbé önálló, amelynél a legtöbbet kellett beavatkozni a vezetésbe.) 

6. Írja ki a képernyőre a minta szerint az autók átlag tömegét.

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

using System;

using System.Collections.Generic; //a lista miatt kell

using System.IO;//a fájlkezelés miatt kell

namespace autokOOP
{
    class auto   
    { 
        public string azonosito { get; set; } //property (tulajdonság/jellemző)
        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(';');
            azonosito = atmeneti[0];
            loero = Convert.ToInt32(atmeneti[1]);
            tomeg = Convert.ToDouble(atmeneti[2]);
            gyorsulas = Convert.ToInt32(atmeneti[3]);
            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";
            //Console.WriteLine("{0,-18} | {1,4} lóerő | {2,4} t | {3,2} mp | {4,2}* kellett beavatkozni", azonosito, loero, tomeg, gyorsulas, beavatkozas);
                
        }

    }
    class Program
    {

        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 i in File.ReadAllLines("adatok.txt"))
            {
                autok.Add(new auto(i));
            }

            //Összes kiírása:
            foreach (var i in autok)
            {
                Console.WriteLine(i);
            //vagy így:
              //Console.WriteLine(i.ToString());
            }
            //vagy így:
            //for (int i = 0; i < autok.Count; i++)
            //{
            //    Console.WriteLine(autok[i].ToString());
            //}

            //3.Írja ki a képernyőre a minta szerint a leggyorsabb autó adatait. (Az a leggyorsabb, ami a legkevesebb idő alatt gyorsul 100-ra.)
            int kiIndex = 0;
            int min = autok[0].gyorsulas;
            for (int i = 0; i < autok.Count; i++)
            {
                if (min > autok[i].gyorsulas)
                {
                    min = autok[i].gyorsulas;
                    kiIndex = i;
                }
            }
            Console.WriteLine($"\nLeggyorsabb autó:\n{autok[kiIndex]}");
            //Console.WriteLine("\nLeggyorsabb autó:\n{0}", autok[kiIndex]);
            //4.Írja ki a képernyőre a minta szerint a legkevésbé önálló autó azonosítóját. (Az a legkevésbé önálló, amelynél a legtöbbet kellett beavatkozni a vezetésbe.)
            kiIndex = 0;
            int max = autok[0].beavatkozas;
            for (int i = 0; i < autok.Count; i++)
            {
                if (max < autok[i].beavatkozas)
                {
                    max = autok[i].beavatkozas;
                    kiIndex = i;
                }
            }
            Console.WriteLine($"\nA legkevésbé önálló autó:\n{autok[kiIndex]}");

            //6.Írja ki a képernyőre az autók átlag tömegét.
            double osszTomeg = 0;
            for (int i = 0; i < autok.Count; i++)
            {
                osszTomeg += autok[i].tomeg;
            }
           
            Console.WriteLine($"\nAz autók átlag tömege (t): {osszTomeg / autok.Count:0.00}");


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

            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("tomeg.txt", ki);
            Console.Write($"\nA program bezárásához nyomjon meg egy billentyűt...");
            Console.ReadLine();
        }
    }
}

Nincsenek megjegyzések:

Megjegyzés küldése