2020. november 26., csütörtök

2020.11.26. 6/ 5. feladatsor: Monitor vásár

Megnéztük az autós feladatsor megoldását, videó készült róla. A házi feladat a monitoros feladatsor első 3 feladatának megoldása hétfőre. 

Monitor vásár

Egy hardver cég többféle monitort árul. A monitorokról a következő adatokat tároljuk: a monitor gyártója; típusa; mérete; ára

A méret colban van, az ár nettó és forintban értjük.

Pl.: Samsung;S24D330H;24;33000

A megoldáshoz először fel kell vinned egy fájlba a monitorok adatait. 5 monitorról gyűjts össze adatokat, ehhez használhatod az internetet.

Feladatok:

1. Olvasd be a fájl tartalmát 4 tömbbe. Tudjuk, hogy 5 monitor van. Szorgalmi: oldd meg, hogy bármennyi monitort is tudj kezelni.

2. Írd ki a monitorok összes adatát, soronként egy monitort a képernyőre. A kiírás így nézzen ki:

Gyártó: Samsung; Típus: S24D330H; Méret: 24 col; Nettó ár: 33000 Ft

2. Hozz létre egy új tömböt, amelyben a bruttó árakat tárolod. A számításhoz tudnod kell, hogy az ÁFA mértéke 27%.

3. Tételezzük fel, hogy mindegyik monitorból 15 db van készleten. A készlet tárolásához hozz létre egy új tömböt (aminek minden eleme 15 legyen kezdetben). Mekkora a raktárkészlet bruttó (tehát áfával növelt) értéke?

4. Írd ki egy új fájlba, és a képernyőre az 50.000 Ft feletti nettó értékű monitorok összes adatát (a darabszámmal együtt) úgy, hogy a szöveges adatok nagybetűsek legyenek, illetve az árak ezer forintba legyenek átszámítva.

5. Egy vevő keresi a HP EliteDisplay E242 monitort. Írd ki neki a képernyőre, hogy hány darab ilyen van a készleten. (A válasz lehet 0 db is.)

6. Egy újabb vevőt csak az ár érdekli. Írd ki neki a legolcsóbb monitor méretét, és árát.

7. A cég akciót hirdet. A 70.000 Ft fölötti árú Samsung monitorok bruttó árából 5%-ot elenged. Írd ki egy újabb tömbbe ezeknek az akciós monitoroknak az árát úgy, hogy ne legyen „üres” tömbelem (kiválogatás tétele). A feldolgozás közben folyamatosan összesítsd a készleten lévő akciós monitorok értékét, és a feldolgozás végén írd ki, hogy mennyit veszítene a cég az akcióval, ha az összes akciós monitort eladná.

8. Írd ki a képernyőre minden monitor esetén, hogy az adott monitor nettó ára a nettó átlag ár alatt van-e, vagy fölötte, esetleg pontosan egyenlő az átlag árral.

9. Modellezzük, hogy megrohamozták a vevők a boltot. 5 és 15 közötti random számú vásárló 1-1 random módon kiválasztott monitort vásárol, ezzel csökkentve az eredeti készletet. Írd ki, hogy melyik monitorból mennyi maradt a boltban. (Vigyázz, hogy nulla darab alá ne mehessen a készlet.)

10. Írd ki a képernyőre, hogy a vásárlások után van-e olyan monitor, amelyikből mindegyik elfogyott.

11. Az Array.Sort(tömb neve) metódus használatával rakd sorba a monitorok gyártóit, és írd ki őket a képernyőre. (Ehhez először másold át a gyártókat egy új tömbbe, és azt rendezd sorba.)

12. Csökkentsd a legdrágább monitor bruttó árát 10%-kal, írd ki ezt az értéket a képernyőre.


Ricsi megoldása:

using System;
using System.IO;
namespace ConsoleApplication1
{
    class Program
    {
        //adat.txt 
        //Samsung;S24D330H;24;33000
        //Acer;V227Qbi;21,5;31000
        //AOC;24G2U;23,8;66000
        //LG;25UM58-P;25;56000
        //Samsung;C27JG50QQU;27;91000
        static string[] gyarto = new string[5];
        static string[] tipus = new string[5];
        static double[] meret = new double[5];
        static double[] ar = new double[5];
        static double[] brutto = new double[5];
        static double[] keszlet = new double[5];
        //Monitor vásár 
        //Egy hardver cég többféle monitort árul. A monitorokról a következő adatokat tároljuk: a monitor gyártója; típusa; mérete; ára 
        //A méret colban van, az ár nettó és forintban értjük. 
        //Pl.: Samsung;S24D330H;24;33000 
        //A megoldáshoz először fel kell vinned egy fájlba a monitorok adatait. 5 monitorról gyűjts össze adatokat, ehhez használhatod az internetet. 
        //Feladatok: 
        //1. Olvasd be a fájl tartalmát 4 tömbbe. Tudjuk, hogy 5 monitor van. Szorgalmi: oldd meg, hogy bármennyi monitort is tudj kezelni. 
        static void elso()
        {
            string[] atmeneti;
            int i = 0;
            StreamReader sr = new StreamReader("adat.txt");
            while (!sr.EndOfStream)
            {
                atmeneti = sr.ReadLine().Split(';');
                gyarto[i] = atmeneti[0];
                tipus[i] = atmeneti[1];
                meret[i] = Convert.ToDouble(atmeneti[2]);
                ar[i] = Convert.ToDouble(atmeneti[3]);
                i++;
            }
            sr.Close();
        }
        //2. Írd ki a monitorok összes adatát, soronként egy monitort a képernyőre. A kiírás így nézzen ki: 
        //Gyártó: Samsung; Típus: S24D330H; Méret: 24 col; Nettó ár: 33000 Ft 
        static void masodik()
        {
            for (int i = 0; i < gyarto.Length; i++)
            {
                Console.WriteLine("Gyártó: {0}; Típus: {1}; Méret: {2} col; Nettó ár: {3}", gyarto[i], tipus[i], meret[i], ar[i]);
            }
            //2. Hozz létre egy új tömböt, amelyben a bruttó árakat tárolod. A számításhoz tudnod kell, hogy az ÁFA mértéke 27%. 
            Array.Copy(ar, brutto, ar.Length);
            for (int i = 0; i < ar.Length; i++)
            {
                brutto[i] = (ar[i] * 127) / 100;
            }
        }
        static void harmadik()
        {
            //3. Tételezzük fel, hogy mindegyik monitorból 15 db van készleten. 
            //A készlet tárolásához hozz létre egy új tömböt (aminek minden eleme 15 legyen kezdetben). 
            for (int i = 0; i < keszlet.Length; i++)
            {
                keszlet[i] = 15;
            }
            double raktaron = 0;
            for (int i = 0; i < brutto.Length; i++)
            {
                raktaron = raktaron + brutto[i] * keszlet[i];
            }
            Console.WriteLine("Raktárkészlet bruttó értéke: {0} Ft", raktaron);
        }
        //4. Írd ki egy új fájlba, és a képernyőre az 50.000 Ft feletti nettó értékű monitorok összes adatát (a darabszámmal együtt) úgy, 
        //hogy a szöveges adatok nagybetűsek legyenek, illetve az árak ezer forintba legyenek átszámítva. 
        static void negyedik()
        {
            StreamWriter sw = new StreamWriter("50efeletti.txt");
            for (int i = 0; i < ar.Length; i++)
            {
                if (ar[i] > 50000)
                {
                    sw.WriteLine("{0} {1} {2} col {3} ezer Ft", gyarto[i].ToUpper(), tipus[i].ToUpper(), meret[i], ar[i] / 1000);
                    Console.WriteLine("{0} {1} {2} col {3} ezer Ft", gyarto[i].ToUpper(), tipus[i].ToUpper(), meret[i], ar[i] / 1000);
                }
            }
            sw.Close();
        }
        //5. Egy vevő keresi a HP EliteDisplay E242 monitort. 
        //Írd ki neki a képernyőre, hogy hány darab ilyen van a készleten. (A válasz lehet 0 db is.) 
        static void otodik()
        {
            int j = 0;
            while (j < gyarto.Length && !(gyarto[j] == "HP EliteDisplay" && tipus[j] == "E242"))
            {
                j++;
            }
            if (j == 5)
            {
                Console.WriteLine("Nincs ilyen monitorunk!");
            }
            else
            {
                Console.WriteLine("{0} db HP EliteDisplay E242 monitor van készleten.", keszlet[j]);
            }
        }
        //6. Egy újabb vevőt csak az ár érdekli. Írd ki neki a legolcsóbb monitor méretét, és árát. 
        static void hatodik()
        {
            double min = ar[0];
            int e = 0;
            for (int i = 1; i < ar.Length; i++)
            {
                if (ar[i] < min)
                {
                    min = ar[i];
                    e = i;
                }
            }
            Console.WriteLine("A legolcsóbb monitor a: {0} {1}, ár: {2}, méret: {3}", gyarto[e], tipus[e], min, meret[e]);
        }
        //7. A cég akciót hirdet. A 70.000 Ft fölötti árú Samsung monitorok bruttó árából 5%-ot elenged. 
        //Írd ki egy újabb tömbbe ezeknek az akciós monitoroknak az árát úgy, hogy ne legyen „üres” tömbelem (kiválogatás tétele). 
        //A feldolgozás közben folyamatosan összesítsd a készleten lévő akciós monitorok értékét, és a feldolgozás végén írd ki, hogy mennyit veszítene a cég az akcióval, ha az összes akciós monitort eladná. 
        static void hetedik()
        {
            int j = 0;
            double osszeg1 = 0;
            double osszeg2 = 0;
            double[] AkciosAr = new double[5];
            for (int i = 0; i < brutto.Length; i++)
            {
                if (gyarto[i] == "Samsung" && brutto[i] > 70000)
                {
                    AkciosAr[j] = brutto[i] - (brutto[i] * 0.05);
                    osszeg2 = osszeg1 + AkciosAr[j];
                    osszeg1 = osszeg1 + brutto[i];
                    j++;
                }
            }
            Console.WriteLine("Ennyit vesztene a cég az akcióval: {0} Ft", osszeg1 - osszeg2);
        }
        //8. Írd ki a képernyőre minden monitor esetén, hogy az adott monitor nettó ára a nettó átlag ár alatt van-e, vagy fölötte, 
        //esetleg pontosan egyenlő az átlag árral. 
        static void nyolcadik()
        {
            double atlag = 0;
            for (int i = 0; i < ar.Length; i++)
            {
                atlag = atlag + ar[i];
            }
            atlag = atlag / 5;
            for (int i = 0; i < ar.Length; i++)
            {
                if (ar[i] < atlag)
                {
                    Console.WriteLine("A(z) {0}. monitor az átlagár alatt van.", i + 1);
                }
                else
                {
                    if (ar[i] > atlag)
                    {
                        Console.WriteLine("A(z) {0}. monitor az átlagár felett van.", i + 1);
                    }
                    else
                    {
                        Console.WriteLine("A monitor ára megegyezik az átlagárral.");
                    }
                }
            }
        }
        //9. Modellezzük, hogy megrohamozták a vevők a boltot. 5 és 15 közötti random számú vásárló 1-1 random módon kiválasztott monitort vásárol, 
        //ezzel csökkentve az eredeti készletet. Írd ki, hogy melyik monitorból mennyi maradt a boltban. (Vigyázz, hogy nulla darab alá ne mehessen a készlet.) 
        static void kilencedik()
        {
            Random rnd = new Random();
            int vasarlo = rnd.Next(5, 16);
            int monitor;
            int j = 0;
            while (j < vasarlo)
            {
                monitor = rnd.Next(0, 5);
                if (keszlet[monitor] != 0)
                {
                    keszlet[monitor]--;
                }
                j++;
            }
            for (int i = 0; i < keszlet.Length; i++)
            {
                Console.WriteLine("{0}. monitor gyártója: {1}, típusa: {2}, készleten: {3} db.", i + 1, gyarto[i], tipus[i], keszlet[i]);
            }
        }
        //10. Írd ki a képernyőre, hogy a vásárlások után van-e olyan monitor, amelyikből mindegyik elfogyott. 
        static void tizedik()
        {
            for (int i = 0; i < keszlet.Length; i++)
            {
                if (keszlet[i] == 0)
                {
                    Console.WriteLine("A {1}, {2} monitorok elfogytak.", gyarto[i], tipus[i]);
                }
            }
        }
        //11. Az Array.Sort(tömb neve) metódus használatával rakd sorba a monitorok gyártóit, és írd ki őket a képernyőre. 
        //(Ehhez először másold át a gyártókat egy új tömbbe, és azt rendezd sorba.) 
        static void tizenegyedik()
        {
            string[] gyarto2 = new string[5];
            Array.Copy(gyarto, gyarto2, gyarto.Length);
            Array.Sort(gyarto2);
            for (int i = 0; i < gyarto2.Length; i++)
            {
                Console.WriteLine(gyarto2[i]);
            }
        }
        //12. Csökkentsd a legdrágább monitor bruttó árát 10%-kal, írd ki ezt az értéket a képernyőre. 
        static void tizenkettedik()
        {
            double max = brutto[0];
            for (int i = 1; i < brutto.Length; i++)
            {
                if (brutto[i] > max)
                {
                    max = brutto[i];
                }
            }
            max = max - (max * 0.1);
            Console.WriteLine("A legdrágább monitor 10% kedvezménnyel: {0}", max);
        }
        static void Main(string[] args)
        {
            elso();
            masodik();
            Console.WriteLine();
            harmadik();
            Console.WriteLine();
            Console.WriteLine("50.000 Ft feletti nettó értékű monitorok adatai:");
            negyedik();
            Console.WriteLine();
            Console.WriteLine("Van e készleten HP EliteDisplay E242 monitor ?");
            otodik();
            Console.WriteLine();
            hatodik();
            Console.WriteLine();
            hetedik();
            Console.WriteLine();
            nyolcadik();
            Console.WriteLine();
            kilencedik();
            Console.WriteLine();
            tizedik();
            Console.WriteLine();
            Console.WriteLine("Monitorok gyártója sorbarendezve:");
            tizenegyedik();
            Console.WriteLine();
            tizenkettedik();
            Console.ReadLine();
        }
    }
}

2020. november 23., hétfő

2020.11.23. 6/4. feladatsor: Önvezető autók

Szerdára a 3. feladatig kell megírni.

 

Metódusokban oldd meg a feladatokat. Figyelj arra, hogy amit lehet, lokális változóként definiálj. A megoldás előtt, ha szükséges, nézd át a fájlkezelős, metódusos alapokat, és lehetőleg közben ne használj segítséget.

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

 

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 5 tömbben.

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

4. Írja ki a képernyőre 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 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).

Varsó megoldása:

using System;

 

using System.IO;

 

 

 

namespace _20201122Hazi

 

{

 

    class Program

 

    {

 

        static int feldolgozandoAdatMennyiseg = 9;

        static string[] azonosito = new string[feldolgozandoAdatMennyiseg];

        static int[] loero = new int[feldolgozandoAdatMennyiseg];

        static double[] tomeg = new double[feldolgozandoAdatMennyiseg];

        static int[] gyorsulas = new int[feldolgozandoAdatMennyiseg];

        static int[] beavatkozas = new int[feldolgozandoAdatMennyiseg];

        static int kiIndex = 0;

        static void AdatokBeolvasasa()

 

        {

 

            StreamReader sr = new StreamReader("adatok.txt");

            string[] atmeneti;

            int k = 0;

            while (!sr.EndOfStream)

            {

                atmeneti = sr.ReadLine().Split(";");

                azonosito[k] = atmeneti[0];

                loero[k] = Convert.ToInt32(atmeneti[1]);

                tomeg[k] = Convert.ToDouble(atmeneti[2].Replace(".", ","));

                //ITT NEM KELL A REPLACE - T HASZNÁLNI, HA A FÁJLBAN ÁTÍRTAD A PONTOT VESSZŐRE.

                gyorsulas[k] = Convert.ToInt32(atmeneti[3]);

                beavatkozas[k] = Convert.ToInt32(atmeneti[4]);

                k++;

            }

 

            sr.Close();

 

        }

 

        static void LeggyorsabbAutoKereses()

 

        {

            int l = 0;

            kiIndex = 0;

            int min = gyorsulas[0];

            while (l < gyorsulas[l])

            {

                if (min < gyorsulas[l])

                {

                    min = gyorsulas[l];

                    kiIndex = l;

                }

                l++;

            }

            Console.WriteLine("A leggyorsabb autó adatai\n---------------------------");

            AutoTipusKiiratasa();

            //ITT NEM KELL METÓDUST HÍVNI, HA KIÍROD A TÖMBELEMET, ÉS A kiIndexET.

        }

 

        static void AutoTipusKiiratasa()

        {

            Console.WriteLine("Típus: " + azonosito[kiIndex]);

            Console.WriteLine("Lóerő: " + loero[kiIndex]);

            Console.WriteLine("Tömeg (t): " + tomeg[kiIndex]);

            Console.WriteLine("Gyorsulás (sec): " + gyorsulas[kiIndex]);

            Console.WriteLine("Emberi beavatkozás (10 000 km-en): " + beavatkozas[kiIndex]);

            Console.WriteLine();

        }

        static void LegkevesbeOnalloKereses()

        {

            int f = 0;

            kiIndex = 0;

            int max = beavatkozas[0];

            while (f < beavatkozas[f])

            {

                if (max > beavatkozas[f])

                {

                    max = beavatkozas[f];

                    kiIndex = f;

                }

                f++;

            }

            Console.WriteLine("A legkevésbé önálló autó adatai\n---------------------------");

            AutoTipusKiiratasa();

            //ITT NEM KELL METÓDUST HÍVNI, HA KIÍROD A TÖMBELEMET, ÉS A kiIndexET.

        }

       

        static void AutokAtlagTomege()

        {

            double osszTomeg = 0;

            for (int i = 0; i < tomeg.Length; i++)

            {

                osszTomeg += tomeg[i];

            }

            osszTomeg = osszTomeg / tomeg.Length;

            Console.WriteLine("Az autók átlag tömege (t): " + osszTomeg);

        }

 

        static void TomegKiiratasFajlba()

        {

            StreamWriter sw = new StreamWriter("tomeg.txt");

            for (int i = 0; i < tomeg.Length; i++)

            {

                sw.WriteLine((i + 1) + " " + tomeg[i] * 1000);

                Console.WriteLine((i + 1) + " " + tomeg[i] * 1000);

            }

            sw.Close();

        }

 

        static void Main(string[] args)

        {

            //2.Az adatokat olvassa be fájlból és tárolja el 5 tömbben.

 

            AdatokBeolvasasa();

 

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

 

            LeggyorsabbAutoKereses();

 

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

 

            LegkevesbeOnalloKereses();

 

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

 

            AutokAtlagTomege();

 

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

 

            TomegKiiratasFajlba();

 

 

 

            Console.Write("\nA program bezárásahoz nyomjon meg egy billentyűt...");

 

            Console.ReadKey();

 

        }

 

    }

 

}