using System
using System.IO;
namespace varosok11b1
{
class Program
{
static string[] varos = new string[5];
static int[] lakos = new int[5];
static int[] tavolsag = new int[5];
static string[] megye = new string[5];
static int index = 0; //legtávolabbi város indexe
static int index2 = 0; //legkevesebb lakosú város indexe
//A program neve legyen: varosok. Metódusos programszerkezetet használj a megoldásnál.
//Minden képernyőre író feladat előtt írjuk ki a képernyőre a feladat sorszámát.
//Aki tudja, oldja meg, hogy megszámolja a fájlban a sorokat,
//és annyi elemű tömböt hoz létre. Egyébként pedig vedd 5 hosszúra a tömböket.
//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.
//A következő adatokat szöveges fájlból vigyük föl összesen 4 tömbbe.
//Az első tömbben a városok nevei;
//a másodikban a lakosok száma;
//a harmadikban a távolság;
//a negyedikben vagy üres karakterlánc, vagy a NO szó szerepeljen.
/*
Békéscsaba 59000 210
Szolnok 72000 119
Kecskemét 112000 93
Nyíregyháza 118000 230 NO
Miskolc 164000 182
*/
//1.feladat:
//Olvassuk be a fájlt, és vigyük föl tömbökbe az adatokat,
//majd írjuk is ki a tartalmukat, egy sorba egy város adatait.
static void elso()
{
StreamReader sr = new StreamReader("varosok.txt");
string[] atmeneti;
int j = 0;
while (!sr.EndOfStream)
{
atmeneti = sr.ReadLine().Split(' ');
varos[j] = atmeneti[0];
lakos[j] = Convert.ToInt32(atmeneti[1]);
tavolsag[j] = Convert.ToInt32(atmeneti[2]);
if (atmeneti.Length == 3)
{
megye[j] = "Megyeszékhely";
}
else
{
megye[j] = "Nem megyeszékhely";
}
j++;
}
sr.Close();
kiir();
}
static void kiir()
{
for (int i = 0; i < varos.Length; i++)
{
Console.WriteLine("{0}: Lakossága: {1}, Távolság Budapesttől: {2}, {3}", varos[i], lakos[i], tavolsag[i], megye[i]);
}
}
//2.feladat:
//Í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, írjunk ki hibaüzenetet.
static void masodik()
{
for (int i = 0; i < megye.Length; i++)
{
if (megye[i] == "Nem megyeszékhely")
{
Console.WriteLine("{0}: Lakossága:{1}", varos[i], lakos[i]);
}
}
}
//3.feladat:
static void legtavolabbi()
{
int max = tavolsag[0];
for (int i = 1; i < tavolsag.Length; i++)
{
if (tavolsag[i] > max)
{
max = tavolsag[i];
index = i;
}
}
}
static void legkevesebb_lakos()
{
int min = lakos[0];
for (int i = 1; i < lakos.Length; i++)
{
if (lakos[0] < min)
{
min = lakos[i];
index2 = i;
}
}
}
static void harmadik()
{
//Előzetesen meg kell nézni innen a cserét:
//https://bestgroupprogramming.blogspot.com/2020/03/20200323-szoveg-pozicionalasa.html
//Cseréld meg a legtávolabbi város adatait a legkevesebb lakosú város adataival úgy,
//hogy az összetartozó adatok továbbra is egymáshoz tartozzanak.
//Segítség:
//Elsőként keresd meg a legnagyobb távolságot, jegyezd meg egy új változóban,
//hanyadik (példánkban 230, ami a 4. indexű helyen van).
legtavolabbi();
legkevesebb_lakos();
//Másodikként keresd meg a legkevesebb lakost, jegyezd meg egy új változóban,
//hogy hanyadik (példánkban 59000, ami a 0. helyen van).
//Mostmár tudod, melyik két sorát kell megcserélni minden tömbnek
//(példánkban Békéscsaba és Nyíregyháza összes adatát kell megcserélni).
//A csere első lépéseként Békéscsaba minden adatát (4 adat)
//beteszed egy-egy megfelelő típusú változóba.
string csereVaros = varos[index];
int csereLakos = lakos[index];
int csereTavolsag = tavolsag[index];
string csereMegye = megye[index];
//A csere második lépéseként Nyíregyháza összes adatát egyesével bemásolod
//a tömbök nulladik helyére. Ezzel fölülírod, ami ott van, de éppen ez a cél.
varos[index] = varos[index2];
lakos[index] = lakos[index2];
tavolsag[index] = tavolsag[index2];
megye[index] = megye[index2];
//A csere harmadik lépéseként a változókból minden adatot bemásolsz
//a 4. indexű helyekre. Ezzel fölülírod, ami ott van, de éppen ez a cél.
varos[index2] = csereVaros;
lakos[index2] = csereLakos;
tavolsag[index2] = csereTavolsag;
megye[index2] = csereMegye;
//Kész. Ellenőrzésként írasd ki újra az összes tömböt.
kiir();
}
//4.feladat:
static void negyedik()
{
//Írjuk ki a Budapesttől legtávolabbi város nevét a képernyőre.
Console.WriteLine("A legtávolabbi város Budapesttől: {0}", varos[index2]);
}
//5.feladat:
static void otodik()
{
//Írjuk ki a legkevesebb lakosú város nevét a képernyőre.
Console.WriteLine("A legkevesebb lakosú város: {0}", varos[index]);
}
//6.feladat:
static void hatodik()
{
//Írjuk ki a 100000 lakosúnál nagyobb városok neveit is, soronként egyet.
//Ha nincs ilyen, írjunk ki hibaüzenetet.
bool van = false;
for (int i = 0; i < varos.Length; i++)
{
if (lakos[i] > 100000)
{
Console.WriteLine(varos[i]);
van = true;
}
}
if(!van)
{
Console.WriteLine("Nincs 100.000 lakosúnál nagyobb város.");
}
}
//itt folytatjuk
//7.feladat:
static void hetedik()
{
bool van = false;
//Döntsük el, hogy van-e 180 km-nél távolabbi város. Ha találtunk ilyet,
//írjuk ki az elsőnek a nevét és a hozzá tartozó km-t.
//Ha nincs ilyen, írjunk ki hibaüzenetet.
int j = 0;
van = false;
while (j < tavolsag.Length && !van)
{
if (tavolsag[j] > 180)
{
Console.WriteLine("{0}, Távolsága: {1}km", varos[j], tavolsag[j]);
van = true;
}
j++;
}
if (!van)
{
Console.WriteLine("Nincs 180 km-nél távolabbi város!");
}
}
//8.feladat:
static void nyolcadik()
{
//Számoljuk meg, és írjuk ki, hogy hány 50000 és 100000 közötti lakosú város van.
//Ha nincs ilyen, írjunk ki hibaüzenetet.
int db = 0;
for (int i = 0; i < lakos.Length; i++)
{
if (lakos[i] >= 50000 && lakos[i] <= 100000)
{
db++;
}
}
if (db != 0)
{
Console.WriteLine("{0}db 50000 és 100000 közötti lakosú város van.", db);
}
else
{
Console.WriteLine("Nincs 50000 és 100000 közötti lakosú város.");
}
}
//9.feladat:
static void kilencedik()
{
//Írjuk ki a városok távolságának átlagát.
double osszeg = 0;
for (int i = 0; i < tavolsag.Length; i++)
{
osszeg = osszeg + tavolsag[i];
}
Console.WriteLine("A városok távolságának átlaga: {0}", osszeg / 5);
}
//10.feladat:
static void tizedik()
{
//Egy új tömbbe másoljuk át a megyeszékhelyek nevét. Ha nincs ilyen, írjunk ki hibaüzenetet.
int j = 0;
string[] megyeszekhely = new string[5];
for (int i = 0; i < megye.Length; i++)
{
if (megye[i] == "Megyeszékhely")
{
megyeszekhely[j] = varos[i];
j++;
}
}
if (j == 0)
{
Console.WriteLine("Nincs olyan varos, ami megyeszékhely lenne.");
}
for (int i = 0; i < megyeszekhely.Length; i++)
{
Console.WriteLine(megyeszekhely[i]);
}
}
//11. feladat:
static void tizenegyedik()
{
//Demonstráld a képernyőn a városok lakosainak számát a következőképpen:
//Az első sorba írd ki a város nevét. A következő sorba írj ki
//annyi # jelet (egyenként, ciklussal), ahány ezer lakosa van a városnak
//(nem baj, ha a jelek a következő sorba is átcsúsznak).
//Ismételd ezt meg az összes várossal.
//A feladat megoldásához arra van szükség, hogy azon a cikluson belül,
//ami végigmegy a városnév tömbön, és kiírja a városok nevét,
//indítani kell még egy ciklust, ami meg kiírja a csillagokat.
//Használj az első ciklusnak for ciklust, a belső ciklus legyen while ciklus,
//és nyilván más legyen a ciklusváltozó neve.
for (int i = 0; i < varos.Length; i++)
{
Console.WriteLine(varos[i]);
int j = 0;
while (j < lakos[i])
{
Console.Write("#");
j += 1000;
}
Console.WriteLine();
}
}
static void Main(string[] args)
{
Console.WriteLine("1. feladat:");
elso();
Console.ReadLine();
Console.WriteLine("2. feladat:");
masodik();
Console.ReadLine();
Console.WriteLine("3. feladat:");
harmadik();
Console.ReadLine();
Console.WriteLine("4. feladat:");
negyedik();
Console.ReadLine();
Console.WriteLine("5. feladat:");
otodik();
Console.ReadLine();
Console.WriteLine("6. feladat:");
Console.WriteLine("100.000 lakosúnál nagyobb városok nevei:");
hatodik();
Console.ReadLine();
Console.WriteLine("7. feladat:");
Console.WriteLine("Az első 180km-nél távolabbi város:");
hetedik();
Console.ReadLine();
Console.WriteLine("8. feladat:");
nyolcadik();
Console.ReadLine();
Console.WriteLine("9. feladat:");
kilencedik();
Console.ReadLine();
Console.WriteLine("10. feladat:");
tizedik();
Console.ReadLine();
Console.WriteLine("11. feladat:");
tizenegyedik();
Console.ReadLine();
}
}
}