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