C# programok ismertetése érdeklődőknek kezdőktől haladókig

C# MŰHELY

C# MŰHELY

Egész szám törzstényezőinek meghatározása

2020. június 16. - Benkő Tiborné

Írjunk programot,amely beolvas egy egész számot és meghatározza a szám törzstényezőit, pél­dául: 12 = 2*2*3

Algoritmus keresése

 Határozzuk meg a 12 törzstényezőit:

szám

osztó

művelet magyarázata

12

2

osztjuk a legkisebb osztóval,

 6

2

újra a legkisebb osztóval osztjuk

 3

3

itt is megkeressük a legkisebb osztót

 1

 

addig végezzük az eljárást, amíg a szám a soroza­tos osztások után 1-re csökken.

 

A kézi számolásos megoldás algoritmusa:

  • kiválasztjuk a szám legkisebb osztóját. A legkisebb osztó keresése 2-től kezdődik. Ha a 2 nem osztója a számnak addig növeljük egyesével az osztó értékét, míg az osztója nem lesz. Ha megtaláltuk az osztót, akkor a számot elosztjuk vele.
  • Ezt a folyamatot addig végezzük, míg az utoljára megtalált törzstényezővel történő osztása után a szám 1-re csökken.

A program megtervezéséhez a while ciklust választottuk:

  • Szükségünk lesz két változóra:

            szám                tárolja a számot, melynek a törzstényezőit keressük.

            osztó                tartalmazza az aktuális osztót.

  • A szám tartalma az osztás következtében állandóan csökken és végül 1 ér­téket veszi fel. A szám 1-re csökkenését while ciklussal figyeljük.
  • Az osztó változót 2-re állítjuk, innen indul az oszthatóság keresése. A belső while ciklus addig növeli az osztó tartalmát, míg szám % osztó nullává vá­lik, ekkor az osztó osz­tója a számnak. Az így megtalált osztót kiíratva és a szorzatot csillaggal jelölve előáll a szám törzstényezős felbontása.

A feladat az utolsó törzstényező utáni szorzójel (*) elhagyása. Az utolsó osztó osz­tásakor a szám tartalma 1 lesz, ezt egy feltételes utasításban vizsgálva, az utolsó osztó után a  * nem kerül kiírásra.

A feladat megoldása:

                  // Törzstényezőkre bontás while ciklussal
        private void button1_Click(object sender, EventArgs e)
        {
            int szám, osztó, db = 0;
            string s = "";
            if (textBox1.Text != "")
            {
                szám = Int32.Parse(textBox1.Text);
                if (szám > 0)
                {
                    while (szám != 1)
                    {
                        osztó = 2;
                        while (szám % osztó != 0)
                        {
                           osztó++;
                        }
                        szám = szám / osztó;
                        db++;
                        if (szám == 1)
                            s += osztó;
                        else s += osztó + "*";
                    }
                    if (db == 1)
                    {
                        textBox2.Text = s;
                        MessageBox.Show("A szám osztója önmaga!",
                                        "Üzenet");
                    }
                    else
                        textBox2.Text = s;
                }
                else
                     MessageBox.Show("Az adat nem megfelelő!",
                                     "Üzenet");
            }
        }

        // Ha az adat változik a korábbi eredmény törlődik
        private void textBox1_TextChanged(object sender, EventArgs e)
        {
             textBox2.Text = "";
        }

A program futási eredményei:

    

    

    

Sorösszeg számítása

Írjunk programot, amely beolvassa a számsor elemeinek számát, hogy hány darab páros szám összegét szeretnék kiszámítani. Oldjuk meg a feladatot continue  utasítással és anélkül. Legyen lehetőség az elemek megjelenítésére is.

A feladat megoldása:

                        int n; // elemek darabszáma
        private void Sorösszeg_Click(object sender, EventArgs e)
        {
            int i, összeg1, összeg2;
            összeg1 = 0; összeg2 = 0;
            if (textBox1.Text != "")
            {
                n = Int32.Parse(textBox1.Text) * 2;
                for (i = 1; i <= n; i++)
                {
                    if (i % 2 != 0)
                       continue;
                    összeg1 += i;
                }
                textBox2.Text = összeg1.ToString();
                for (i = 1; i <= n; i++)
                     if (i % 2 == 0) összeg2 += i;
                textBox3.Text = összeg2.ToString();
            }
        }

        private void Páros_elemek_Click(object sender, EventArgs e)
        {
            int i, db = 0;
            listBox1.Items.Clear();
            for (i = 1; i <= n; i++)
            {
                if (i % 2 == 0)
                {
                    listBox1.Items.Add(i);
                    db++;
                }
            }
            label4.Text ="Elemek száma: " + db;
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = "";
            textBox3.Text = "";
            listBox1.Items.Clear();
            label4.Text = "";
       }

A program futási eredményei :

 

 

 

Gondoltam egy számot

Írjunk programot, amely 1 – 100 között generál egy véletlen számot és azt kell találgatással kitalálni. A program számolja a találgatások számát a megtalált számig.

A  feladat megoldása:

                        int szám, gondolt_szám, találat, max;
        Random m = new Random();

        // A Keres függvény a kijelzéshez ad információt
        static int Keres(int x, int g)
        {
            int h = 0;
            if (x == g) h = 1;
            if (x <  g) h = 2;
            if (x >  g) h = 3;
            return h;
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            max = 100;
            gondolt_szám = m.Next(max) + 1;
            Új_tipp.Enabled = false;
        }

        private void Új_tipp_Click(object sender, EventArgs e)
        {
            label2.Text = "Üzenet";
            Adat.Text = Üzenet.Text = "";
            gondolt_szám = m.Next(max) + 1;
            Tipp.Enabled = true;
        }

        private void Tipp_Click(object sender, EventArgs e)
        {
            int eredmény = 0;
            if (Adat.Text != "")
            {
                try
                {
                    szám = Int32.Parse(Adat.Text);
                    if (szám > 0 && szám <= 100)
                        eredmény = Keres(szám, gondolt_szám);
                    találat++;
                    switch (eredmény)
                    {
                        case 1: Üzenet.Text = találat.ToString() +
                                              "   lépésben";
                                label2.Text = "Eltalálta";
                                Tipp.Enabled = false;
                                Új_tipp.Enabled = true;
                                break;
                        case 2: Üzenet.Text = "kevés";
                                break;
                        case 3: Üzenet.Text = "sok";
                                break;
                        default:
                            MessageBox.Show("Hibás adat!",
                                            "Hibajelzés");

                            Adat.Text= "";
                            break;
                     }

                }// try
                catch (FormatException)

                {
                    MessageBox.Show("Hibás adat","Figyelem",
                                    MessageBoxButtons.OK);
                    Adat.Text= "";
                }// catch
            }
         }

        private void Adat_TextChanged(object sender, EventArgs e)
        {
             Üzenet.Text = "";
        }

        private void Kilépés_Click(object sender, EventArgs e)
        {
             Application.Exit();
        }

 A program futási eredményei:

 

Bűvös négyzet generálása

Készítsünk olyan bűvös négyzetet, amely 3,5,7 max. 9 méretű mátrix lehet. A bűvös négyzet lényege, hogy a négyzetben lévő számok sorainak és oszlopainak valamint átlóinak összege mindig azonos.

A feladat megoldása:

                        int max = 9; // a mátrix max méret
        static int Agrippa(int n, ref int[] mátrix)
        {
            int i, j, IVAL;  // pozíció és a beírandó szám
            for (i = 0; i < n * n; i++)
               mátrix[i] = 0;  // mátrix nullázása
            /
/ kezdőértékek beállítása
            j = (n + 1) / 2; i = j + 1; IVAL = 1;
            while (mátrix[i + n * j] >= 0) //ha < 0, akkor vége
            {
                if (mátrix[i + n * j] == 0)
                { 
                    mátrix[i + n * j] = IVAL;
                    if (IVAL == n * n) return 1; // sikeres
                    IVAL++; i++; j++; // lépés le jobbra
                    if (i > n) // ha kint vagyunk a négyzetből
                    {
                        if (j > n)
                           { i = 2; j = n; }
                        else i = 1;
                    }
                    else
                    {
                        if (j > n) j = 1;
                    }
                }
                else  // már van ott szám
                {
                    i++; j--;
                    if (i > n) i = 1;
                }
            }
            return 0; // hiba;
        }

        private void Generálás_Click(object sender, EventArgs e)
        {
            int i, j, n, jel;
            int[] mtömb;
            if (textBox1.Text != "")
            {
                n = Int32.Parse(textBox1.Text);
                if (n < 3 || n > max || ((n % 2) == 0))
                {
                    MessageBox.Show(
                    "A méret: 3,5,7,9 lehet, nem lehet páros szám!",
                    "Üzenet");
                    textBox1.Text = "";
                }
                else
                {
                    mtömb = new int[(max + 1) * (max + 1)];
                    jel = Agrippa(n, ref mtömb);
                    if (jel == 0)
                        MessageBox.Show("Futási hiba", "Üzenet");
                    else
                    {
                        textBox2.Text = "";
                        MessageBox.Show("Sikeres futás", "Üzenet");
                        for (i = 1; i <= n; i++) // sorok
                        {
                            for (j = 1; j <= n; j++)
                            {
                                textBox2.Text +=
                                         mtömb[i + j * n].ToString()
                                         + "   ";
                            }
                            richTextBox1.Text += textBox2.Text
                                                 + "\n";
                            textBox2.Text = "";
                        }
                    }
                }
             }

         }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
             richTextBox1.Text = "";
        }

A program futási eredményei:

 

 

 

Hibajelzés:

Évszám felbontása

Írjunk függvényt az évszám felbontására.

A feladat megoldása:

                  static void ÉvFelbont(int év, out int ezres, out int százas,
                            out int tízes, out int egyes)
        {
            int m;
            ezres = év / 1000;
            m = év % 1000;
            százas = m / 100;
            m = év % 100;
            tízes = m / 10;
            m = év % 10;
            egyes = m;
        }

        private void Felbontás_Click(object sender, EventArgs e)
        {
            int évszám, ezres, százas, tízes, egyes;
            if (textBox1.Text != "")
            {
                évszám = Int32.Parse(textBox1.Text);
                ÉvFelbont(évszám,out ezres, out százas,
                out tízes, out egyes);
                textBox2.Text = ezres.ToString();
                textBox3.Text = százas.ToString();
                textBox4.Text = tízes.ToString();
                textBox5.Text = egyes.ToString();
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = ""; textBox3.Text = "";
            textBox4.Text = ""
textBox5.Text = "";
        }

A program futási eredménye:

 

 

Szöveg megfordítása kisbetűvel és nagybetűvel egy függvényben

Írjunk programot, amely egy szöveget fordítva írja vissza kisbetűvel és nagybetűvel egy függvény használatával.

A feladat megoldása:

            static void StrtFordít(string sz, int betű, out string szf)
        {
            int i, j, sdb;
            sdb = sz.Length;
            char[] s_fordítva = new char[sdb];
            szf = "";
            j = 0;
            for (i = sz.Length - 1; i >= 0; i--)
            {
                s_fordítva[j] += sz[i]; j++;
            }
            for (i = 0; i <= sdb - 1; i++)
                szf += s_fordítva[i];
            if (betű == 1) szf = szf.ToLower();
            else if (betű == 2) szf = szf.ToUpper();
        }

        private void checkBox1_Click(object sender, EventArgs e)
        {
            string s, s_vissza;
            if (textBox1.Text != "")
            {
                s = textBox1.Text;
                StrtFordít(s, 1,out  s_vissza);
                textBox2.Text = s_vissza;
            } 
        }

        private void checkBox2_Click(object sender, EventArgs e)
        {
            string s, s_vissza;
            if (textBox1.Text != "")
            {
                s = textBox1.Text;
                StrtFordít(s, 2, out  s_vissza);
                textBox3.Text = s_vissza;
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = ""; textBox3.Text = "";
        }

A program futási eredménye:

 

 

Szöveg megfordítása kisbetűvel és nagybetűvel

Írjunk programot, amely a szöveget fordítva írja vissza kisbetűvel és nagybetűvel függvény használatával.

A feladat megoldása:

A rádiógombok Click eseménykezelőjével történik meg a függvények hívása.

             static void StrtFordítKisbetűvel(string sz, out string szf)
         {
            int i, j, sdb;
            sdb = sz.Length;
            char[] s_fordítva = new char[sdb];
            szf = "";
            j = 0;
            for (i = sz.Length - 1; i >= 0; i--)
            {
                s_fordítva[j] += sz[i]; j++;
            }
            for (i = 0; i <= sdb - 1; i++)
                szf += s_fordítva[i];
            szf = szf.ToLower();
        }

        static string StrtFordítNagybetűvel(string sz)
        {
            int i, j, sdb;
            string szf = "";
            sdb = sz.Length;
            char[] s_fordítva = new char[sdb];
            j = 0;
            for (i = sz.Length - 1; i >= 0; i--)
            {
                s_fordítva[j] += sz[i]; j++;
            }
            for (i = 0; i <= sdb - 1; i++)
                szf += s_fordítva[i];
            return szf.ToUpper();
        }

        private void Kisbetűvel_Click(object sender, EventArgs e)
        {
            string s, s_vissza;
            if (textBox1.Text != "")
            {
                s = textBox1.Text;
                StrtFordítKisbetűvel(s, out  s_vissza);
                textBox2.Text = s_vissza;
            }
        }

        private void Nagybetűvel_Click(object sender, EventArgs e)
        {
            string s, s_vissza;
            if (textBox1.Text != "")
            {
                s = textBox1.Text;
                s_vissza  = StrtFordítNagybetűvel(s);
                textBox3.Text = s_vissza;
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
            textBox2.Text = "";
            textBox3.Text = "";
        }

  A program futási eredménye:  

 

Szöveg megfordítása függvénnyel

Írjunk programot, amely a szöveget megfordítva írja vissza függvény használatával.

A feladat megoldása:

        static void StrtFordít(string sz, out string szf)
        {
            int i, j, sdb;
            sdb = sz.Length;
            char[] s_fordítva = new char[sdb];
            szf = "";
            j = 0;
            for (i = sz.Length - 1; i >= 0; i--)
            {
                s_fordítva[j] += sz[i];
                j++;
            }
            for (i = 0; i <= sdb - 1; i++)
                szf += s_fordítva[i];
        } 

        private void Fordítás_Click(object sender, EventArgs e)
        {
            string s, s_vissza;
            if (textBox1.Text != "")
            {
                s = textBox1.Text;
                StrtFordít(s, out  s_vissza);
                textBox2.Text = s_vissza;
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
             textBox2.Text = "";
        }

A program futási eredménye:

 

 

Szöveg megfordítása

Írjunk programot, amely a megadott szöveget fordítva írja vissza.

A  feladat megoldása:

        private void Fordítás_Click(object sender, EventArgs e)
        {  
            int i, j, sdb;
            string s;
            char[] s_fordítva;
            textBox2.Text = "";
            if (textBox1.Text != "")
            {
                s = textBox1.Text;
                sdb = s.Length;
                s_fordítva = new char[sdb];
                j = 0;
                for (i = s.Length - 1; i >= 0; i--)
                {
                    s_fordítva[j] += s[i];
                    j++;
                }
                for (i = 0; i <= sdb-1; i++)
                    textBox2.Text += s_fordítva[i];
            }
        }

        private void textBox1_TextChanged(object sender, EventArgs e)
        {
             textBox2.Text = "";

        }

A program futási eredménye:


 

 

Naptár használata

Készítsünk programot, amely az évszám beírásával, valamint a hónap és a napi dátum kiválasztásával megállapítja, hogy a hét melyik napjára esett.

A feladat megoldása:

            private void button1_Click(object sender, EventArgs e)
        {
            CultureInfo kultúraInfo = new CultureInfo("hu-HU");
            // magyar területi beállítások
            DateTime dátum = dateTimePicker1.Value;
            string ige = "esik";
            if (dátum < DateTime.Now)
                ige = "esett";
            textBox1.Text = String.Format("{0} {1} napra {2}.",
                     dátum.ToString("yyyy.MM.dd.", kultúraInfo),
                     dátum.ToString("dddd", kultúraInfo), ige);
        }

        private void dateTimePicker1_ValueChanged(object sender,
                                                  EventArgs e)
        {
            textBox1.Text = "";
        }

A program futási eredményei:

    

   

süti beállítások módosítása