Ez a megoldás mindenkinek megvan a digifüzetében. Itt most közzéadom olyan optimalizált verzióját, amiben mindenre találsz példát.
using System;
using System.IO;
using System.Linq;
using System.Collections.Generic;
namespace VarosKereso
{
class Varos
{
public string Varosnev;
public int Lakosokszama;
public int Tavolsag;
public string Megyeszekhely;
public Varos(string sor)
{
List<string> atmeneti = sor.Split(" ").ToList();
Varosnev = atmeneti[0];
Lakosokszama = Convert.ToInt32(atmeneti[1]);
Tavolsag = Convert.ToInt32(atmeneti[2]);
if (atmeneti.Count < 4)
{
Megyeszekhely = "Igen";
}
else
{
Megyeszekhely = "Nem"; //feltételeztük, hogy jó volt a fájl tartalma
}
}
public string kiiras() //ez egyetlen várost tud kezelni egyszerre
{
string ki = $"Település neve: {Varosnev}, Lakosok száma: {Lakosokszama} fő, Budapesttől való távolság: {Tavolsag} km, Megyeszékhely? {Megyeszekhely}";
return ki;
}
}
class Program
{
static string legtavolabbi(List<Varos> v)
{
int max = v[0].Tavolsag;
int index = 0;
for (int i = 1; i < v.Count; i++)
{
if (max < v[i].Tavolsag)
{
max = v[i].Tavolsag;
index = i;
}
}
return v[index].Varosnev;
}
static string lakszamFelett(List<Varos> v, int b)
{
string lakFelettKiir = String.Empty;
bool van = false;
for (int i = 0; i < v.Count; i++)
{
if (b < v[i].Lakosokszama)
{
lakFelettKiir += v[i].kiiras() + "\n" ;
van = true;
}
}
if (!van)
{
lakFelettKiir = "Nincs az ön által megadott lakosságszámnál nagyobb lakosszámmal rendelkező település.";
}
return lakFelettKiir;
}
static void fajlkiiras(List<Varos> a)
{
StreamWriter sw = new StreamWriter("Varos1.txt");
for (int i = 0; i < a.Count; i++)
{
if (a[i].Megyeszekhely == "Nem")
{
sw.WriteLine($"{a[i].Varosnev.ToUpper()},Nem megyeszékhely");
}
else
{
sw.WriteLine($"{a[i].Varosnev.ToUpper()},Megyeszékhely");
}
}
sw.Close();
}
static void Main(string[] args)
{
//A program neve legyen: varosok.
//A tanult objektum-orientált programszerkezetet használd a megoldásnál.
//Minden képernyőre író feladat előtt írjuk ki a főprogramban a feladat sorszámát.
//A fájl most 5 sort tartalmaz, de a programod készüljön fel arra,
//hogy hosszabb, és más tartalmú fájlt is fel tudjon dolgozni.
//A programban városok adatait tároljuk.
//Az adatok soronként: a város neve, lakosainak száma, Budapesttől mért távolsága,
//illetve amelyik város nem megyeszékhely, ott még ez is szerepel: NO.
//Ez legyen a varosok.txt tartalma:
/*
Békéscsaba 59000 210
Szolnok 72000 119
Kecskemét 112000 93
Nyíregyháza 118000 230 NO
Miskolc 164000 182
*/
//1.feladat:
Console.WriteLine("1. feladat\nBeolvasás");
//Olvasd be a fájlt, és tárold a tartalmát egy osztálypéldányokat tartalmazó listában.
List<Varos> varosok = new List<Varos>();
foreach (var item in File.ReadAllLines("varosok.txt"))
{
varosok.Add(new Varos(item));
}
//2.feladat:
//Írd ki az adatokat a képernyőre, egy sorba egy város adatait.
Console.WriteLine("2. feladat\nÖsszes adat kiírása");
for (int i = 0; i < varosok.Count; i++)
{
Console.WriteLine(varosok[i].kiiras());
}
//3.feladat:
Console.WriteLine("3. feladat\nNem megyeszékhelyek neve, népessége");
//Írd ki a képernyőre annak a városnak a nevét, és a népességét, amely nem megyeszékhely.
//(Ha több ilyen lenne, mindet ki kéne írni.) Ha nincs ilyen, írj ki hibaüzenetet.
bool megyeszhely = false;
for (int i = 0; i < varosok.Count; i++)
{
if (varosok[i].Megyeszekhely == "Nem")
{
Console.WriteLine($"{varosok[i].Varosnev}, {varosok[i].Lakosokszama}");
megyeszhely = true;
}
}
if (megyeszhely == false)
{
Console.WriteLine("Nincs olyan település a listában, amely nem megyeszékhely!");
}
//4.feladat:
//Írd ki a Budapesttől legtávolabbi város nevét a képernyőre. A feladatot lehetőleg függvénnyel valósítsd meg.
//Ha nem függvénnyel valósítod meg, kaphatsz részpontokat.
Console.WriteLine("4. feladat\nLegtávolabbi város nevének kiíratása...");
Console.WriteLine(legtavolabbi(varosok));
//vagy szájbarágósabban:
Console.WriteLine("4. feladat\nLegtávolabbi város nevének kiíratása once more...");
string nev = legtavolabbi(varosok);
Console.WriteLine(nev);
//5.feladat:
//Írd ki a legkevesebb lakosú város nevét a képernyőre. Nem kötelező metódust használni.
Console.WriteLine("5. feladat\nLegkevesebb lakosú város nevének kiíratása...");
int min = varosok[0].Lakosokszama;
int index = 0;
for (int i = 0; i < varosok.Count; i++)
{
if (min > varosok[i].Lakosokszama)
{
min = varosok[i].Lakosokszama;
index = i;
}
}
Console.WriteLine(varosok[index].Varosnev);
//6.feladat:
//Kérd meg a felhasználót a főprogramban, hogy adjon meg egy lakosságszámot.
//Írd ki a felhasználó által beírt értéknél nagyobb lakosságú városok adatait, soronként egyet.
//Ha nincs ilyen, írj ki hibaüzenetet.
Console.WriteLine("6. feladat\nBekért értéknél nagyobb lakosságú városok összes adata");
Console.Write("Kérek egy értéket: ");
int bekert = Convert.ToInt32(Console.ReadLine());
Console.WriteLine(lakszamFelett(varosok, bekert));
//7.feladat:
//Döntsd el, hogy van-e 180 km-nél távolabbi város. Ha találsz ilyet,
//írd ki az elsőnek a nevét és a hozzá tartozó km-t.
//Ha nincs ilyen, írj ki hibaüzenetet.
Console.WriteLine("7. feladat\n180 km-nél távolabbi városok kilistázása...");
bool megfelel = false;
int k = 0;
while (k < varosok.Count && !megfelel)
{
if (varosok[k].Tavolsag > 180)
{
megfelel = true;
}
k++;
}
if (megfelel)
{
Console.WriteLine($"{varosok[k - 1].Varosnev} az az első település amely Budapesttől 180 kilométeren túl helyezkedik el! A távolság {varosok[k - 1].Tavolsag} kilométer.");
}
else
{
Console.WriteLine($"HIBA! Nincsen olyan település az adatok között, amely Budapesttől messzebb lenne, mint 180 kilométer");
}
//8. feladat:
//Írd ki egy új fájlba a városok neveit nagybetűsen,
//mögéjük vesszővel elválasztva azt a szót,
//hogy megyeszékhely/nem megyeszékhely
//(a valóságnak megfelelően).
Console.WriteLine("8. feladat\nVárosok kiíratása fájlba...");
fajlkiiras(varosok);
Console.WriteLine("A program bezárásához nyomjon meg egy billentyűt...");
Console.ReadLine();
}
}
}
Nincsenek megjegyzések:
Megjegyzés küldése
Megjegyzés: Megjegyzéseket csak a blog tagjai írhatnak a blogba.