2017. június 20., kedd

2017.06.20. Nyári gyakorlat 2. nap


1. Egymásba ágyazott ciklusok ismétlése
a múlt órai munka alapján

2. Új anyag: hátul tesztelő ciklus



namespace hatulTeszteloCiklus
{
    class Program
    {
        static void Main(string[] args)
        {
            int[] szamok = new int[10];
            Random rnd = new Random();

            for (int k = 0; k < szamok.Length; k++)
            {
                szamok[k] = rnd.Next(100);
            }

            //Ismétlés:
            //Összegzés tétele while ciklussal:
            int osszeg = 0;
            int i = 0;
            while (i < szamok.Length)
            {
                osszeg = osszeg + szamok[i];
                i++;
            }
            Console.WriteLine("Összeg while ciklussal: {0}", osszeg);

            //Hátultesztelő ciklus:
            //A feltétel kiértékelése nem a ciklus elején,
            //hanem a végén történik.
            //A fenti ciklus hátultesztelő módon:
            osszeg = 0;
            i = 0;
            do
            {
                osszeg = osszeg + szamok[i];
                i++;
            }
            while (i < szamok.Length);
            Console.WriteLine("Összeg hátultesztelő (do while) ciklussal: {0}", osszeg);
            //Az lényeges különbség, hogy a ciklusmag egyszer
            //mindenképp végrehajtódik.


            //1.feladat:
            //Hozzunk létre egy 5 elemű double tömböt,
            //billentyűzetről töltsük fel,
            //majd adjuk össze az elemeit!

            double[] tortSzamok = new double[5];
            for (int j = 0; j < tortSzamok.Length; j++)
            {
                Console.Write("Kérek egy tört számot: ");
                tortSzamok[j] = Convert.ToDouble(Console.ReadLine());
            }
            double tortOsszeg = 0;
            i = 0;
            do
            {
                tortOsszeg = tortOsszeg + tortSzamok[i];
                i++;
            }
            while (i < tortSzamok.Length);
            Console.WriteLine("Tört számok összege hátultesztelő (do while) ciklussal: {0}", tortOsszeg);



            //2. feladat:
            //Adjuk meg azon elemek összegét,
            //amelyek kisebbek 5-nél!
            //Használjunk hátultesztelő ciklust!

            tortOsszeg = 0;
            i = 0;
            do
            {
                if (tortSzamok[i] < 5)
                {
                    tortOsszeg = tortOsszeg + tortSzamok[i];
                }
                i++;
            }
            while (i < tortSzamok.Length);
            Console.WriteLine("Az 5-nél kisebb tört számok összege hátultesztelő (do while) ciklussal: {0}", tortOsszeg);

            //3. feladat:
            //Addig írjunk ki 5-től indulva 5-tel osztható
            //egész számokat, amíg az adott számot 4-gyel szorozva
            //el nem éri az 1.000.000-t. (Vagyis ez 250000.)
            //Alkalmazzunk hátul tesztelő ciklust!


            Console.WriteLine("5-tel osztható számok kiírása következik:");
            Console.ReadLine();
            int szam = 5;
            do
            {
                Console.WriteLine(szam);
                szam = szam + 5;
            } while (szam * 4 <= 1000000);
            Console.ReadLine();


            //4. feladat:
            //Kezdőértékünk legyen a 10 millió.
            //Addig osszuk 10-zel, amíg el nem érjük az 1-gyet!
            //Alkalmazzunk hátul tesztelő ciklust! 


            Console.WriteLine("Osztások eredményének kiírása következik:");
            Console.ReadLine();
            szam = 10000000;
            do
            {
                Console.WriteLine(szam);
                szam = szam / 10;
            } while (szam >= 1);
            Console.ReadLine();


            //5. feladat:
            //Írjunk végtelen, hátul tesztelő ciklust!  
            Console.WriteLine("Vigyázat! Végtelen ciklus jön!");
            Console.ReadLine();
            i = 0;
            do
            {
                i++;
                Console.WriteLine("A ciklusváltozó értéke: {0} ... nem állok meg úgy sem...", i);
            }
            while (true);
            //Console.ReadLine(); ez már nem is kell...

        }
    }

}

3. Metódusok bevezetése

Mintafeladat:

namespace metodusokBevezeteseI
{
    class Program
    {
        //Metódusok bevezetése
        //Feladat: Töltsünk fel egy 10 elemű
        //int tömböt véletlen számokkal.
        static int[] szamok = new int[10];
        //ezt a tömböt az egész programban akarjuk használni
        static Random rnd = new Random();
        //ezt a változót az egész programban akarjuk használni

        static void tombFeltoltes() //ez egy metódus kezdete
        { //static: kötelező kitenni, azt jelzi, hogy ezt a metódust
            //a Main()-ben is akarjuk használni
            int i = 0;
            while (i < szamok.Length)
            {
                szamok[i] = rnd.Next(100);
                i++;
            }
        }//a metódus idáig tart

        //Írjuk ki a tömb tartalmát a képernyőre.
        static void kiiras()
        {
            foreach (int x in szamok)
            {
                Console.WriteLine(x);
            }
        }

        //Adjuk össze a tömbelemeket.
        static void osszegzesTetele() //ez is egy újabb metódus
        {
            int osszeg = 0;
            int i = 0;
            while (i < szamok.Length)
            {
                osszeg = osszeg + szamok[i];
                i++;
            }
            Console.WriteLine("Összeg: {0}", osszeg);
        }

        static void Main(string[] args) //itt kezdődik a program futása
        {//itt már készen van a tömb, és használható az rnd változó is
            tombFeltoltes(); //ezzel meghívjuk a metódust
            //ilyenkor a program végrehajtása a fenti metódus első
            //soránál folytatódik (int i = 0;)
            //majd amikor lefut benne a ciklus, folytatódik a program
            //végrehajtása itt, a következő metódushívásnál:
            kiiras();
            osszegzesTetele();
            Console.ReadLine();
        }
    }
}

Az előző feladatsor átalakítása metódusok használatával:
namespace metodusokBevezetese
{

    class Program
    {
        static int[] szamok = new int[10];
        static Random rnd = new Random();
        static int osszeg = 0;
        static int i = 0;
        static double[] tortSzamok = new double[5];
        static double tortOsszeg = 0;
        static int szam = 0;
       
        static void feltoltes()
        {
            for (int k = 0; k < szamok.Length; k++)
            {
                szamok[k] = rnd.Next(100);
            }
        }

        static void osszegzesTeteleWhileCiklussal()
        {
            i = 0;
            osszeg = 0;
            while (i < szamok.Length)
            {
                osszeg = osszeg + szamok[i];
                i++;
            }
            Console.WriteLine("Összeg while ciklussal: {0}", osszeg);
        }

        static void osszegzesHatulTesztelo()
        {
            osszeg = 0;
            i = 0;
            do
            {
                osszeg = osszeg + szamok[i];
                i++;
            }
            while (i < szamok.Length);
            Console.WriteLine("Összeg hátultesztelő (do while) ciklussal: {0}", osszeg);
        }

        static void doubleFeltoltes()
        {
             for (int j = 0; j < tortSzamok.Length; j++)
            {
                Console.Write("Kérek egy tört számot: ");
                tortSzamok[j] = Convert.ToDouble(Console.ReadLine());
            }
        }


        static void tortOsszegHatulTesztelo()
        {
            i = 0;
            do
            {
                tortOsszeg = tortOsszeg + tortSzamok[i];
                i++;
            }
            while (i < tortSzamok.Length);
            Console.WriteLine("Tört számok összege hátultesztelő (do while) ciklussal: {0}", tortOsszeg);
        }

        static void kisebbOtnel()
        {
            tortOsszeg = 0;
            i = 0;
            do
            {
                if (tortSzamok[i] < 5)
                {
                    tortOsszeg = tortOsszeg + tortSzamok[i];
                }
                i++;
            }
            while (i < tortSzamok.Length);
            Console.WriteLine("Az 5-nél kisebb tört számok összege hátultesztelő (do while) ciklussal: {0}", tortOsszeg);
        }

        static void ottelOszthatoKiiras()
        {
            do
            {
                szam = szam + 5;
                Console.WriteLine(szam);
            } while (!(szam * 4 >= 1000000));
        }

        static void osztasok()
        {
            szam = 10000000;
            do
            {
                szam = szam / 10;
                Console.WriteLine(szam);
            } while (!(szam <= 1));
        }

        static void Main(string[] args)
        {

            feltoltes();          

            osszegzesTeteleWhileCiklussal();

            osszegzesHatulTesztelo();

            doubleFeltoltes();

            tortOsszegHatulTesztelo();
        
            kisebbOtnel();
        
            Console.WriteLine("5-tel osztható számok kiírása következik:");
            Console.ReadLine();
            ottelOszthatoKiiras();
            Console.ReadLine();    

            Console.WriteLine("Osztások eredményének kiírása következik:");
            Console.ReadLine();
            osztasok();
            Console.ReadLine();

        }
    }
}