2020. november 30., hétfő

2020.11.30. Monitorvásár ellenőrzése

 Ellenőriztük a feladatsor első részét, közben lépésenkénti futtatással ellenőriztük az átmeneti tömb működését. Ha szükséges, mentsd a videót, ami erről készült.

2020. november 23., hétfő

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

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.

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.11.23. Tömbfüggvények, tömb másolás

 Nem leadandó, csak elvégzendő feladat: a Tömbfüggvények, tömb másolás lecke programját futtatni, tesztelni, és megtanulni belőle a függvényeket, tömbmásolást.


            int[] tomb = new int[5];

            Random rnd = new Random();

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

            {

                tomb[i] = rnd.Next(10);

            }

            Console.Write("Első tömb: ");

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

            {

                Console.Write("{0} ",tomb[i]);

            }

            Console.WriteLine();

 

            Console.Write("Első tömb átlaga: ");

            Console.WriteLine(tomb.Average());

            Console.Write("Első tömb tartalmazza-e a 6-ot:");

            Console.WriteLine(tomb.Contains(6));

            Console.Write("Első tömb minimuma: ");

            Console.WriteLine(tomb.Min());

            Console.Write("Első tömb maximuma: ");

            Console.WriteLine(tomb.Max());

            Console.Write("Első tömb összege: ");

            Console.WriteLine(tomb.Sum());

 

            //Létrehozok egy új tömböt és belemásolom az elsőt.

            //A második tömbön végrehajtott módosítások az elsőben is megjelennek.

 

            int[] tomb1 = new int[5]; //unnecessary assignment figyelmeztetést kapunk

            tomb1 = tomb; //továbbra is csak egy tömbünk van, mostmár tomb és tomb1 néven is elérhető

 

            Console.Write("Második tömb: ");

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

            {

                Console.Write("{0} ", tomb1[i]);

            }

            Console.WriteLine();

 

            tomb1[0] = 15;

            Console.Write("Első tömb ");

            Console.WriteLine(tomb[0]); //ennek is 15 lesz az értéke

            Console.Write("Második tömb ");

            Console.WriteLine(tomb1[0]);

 

            //Tehát a fenti módszert ne alkalmazzuk, ha egy tömbből valódi másolatot szeretnénk csinálni.

 

            //A másolás számunkra alkalmas módja:

 

            int[] tomb2 = new int[5];

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

            {

                tomb2[i] = rnd.Next(10);

            }

            Console.WriteLine();

            int[] tomb3 = new int[5];

            Array.Copy(tomb2, tomb3, tomb.Length); //ezek után két független tömbünk van, ugyanazokkal az értékekkel

       

            Console.WriteLine("Harmadik tömb: ");

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

            {

                Console.Write("{0} ", tomb2[i]);

            }

            Console.WriteLine();

            Console.WriteLine("Negyedik tömb: ");

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

            {

                Console.Write("{0} ", tomb3[i]);

            }

            Console.WriteLine();

            tomb2[0] = 20;

            tomb3[0] = 30;

            tomb2[4] = 40;

            tomb3[4] = 50;

            Console.WriteLine("Változtatás után:");

            Console.WriteLine("Harmadik tömb: ");

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

            {

                Console.Write("{0} ", tomb2[i]);

            }

            Console.WriteLine();

            Console.WriteLine("Negyedik tömb");

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

            {

                Console.Write("{0} ", tomb3[i]);

            }

            Console.ReadLine();