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:

    

    

    

A bejegyzés trackback címe:

https://csharp-muhely.blog.hu/api/trackback/id/tr4615813130

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása