1. megoldás while ciklussal
Algoritmus készítés
Az algoritmushoz készítsünk kézi számolást! Határozzuk meg 16 és 40 legnagyobb közös osztóját. A két szám közül kiválasztjuk a kisebbet, majd 2-től egyesével növelve a kisebb szám-ig a két szám közös osztóit meghatározzuk.
16 osztói: 2 4 8 16
40 osztói: 2 4 5 8
közös osztók 2 4 8
Tehát a 16 és 40 egész számoknak 8 a legnagyobb közös osztója.
A program megtervezése:
- A program megírásához szükségünk lesz négy változóra:
szám1,szám2 tárolja a két számot, melynek a legnagyobb
közös osztóját keressük,
osztó tartalmazza az aktuális osztót,
közös az aktuális közös osztó tárolására szolgál.
- A szám1 és szám2 változókba beolvassuk a két egész számot.
- Az osztó kezdőértéke 2, innen indul az oszthatóság vizsgálat.
- A közös változó kezdőértéke 0, ha értéke nullánál nagyobb lesz,
azt jelenti, hogy a két számnak van közös osztója, az utoljára
felvett érték lesz a legnagyobb közös osztó.
A while ciklus addig működik, míg az osztó kisebb a kisebbik számnál,
legyen az akár a szám1 vagy a szám2.
(osztó <= szám1 && osztó <= szám2)
- A ciklus magja megvizsgálja, hogy az osztó mindkettő osztója-e:
(szám1 % osztó = 0 && szám2 % osztó = 0)
Ha a feltétel teljesül, akkor a közös változó felveszi az osztó értékét
- Gondoskodni kell a ciklusban az osztó változó növeléséről:
osztó++;
- A ciklus működésének befejezése után a közös változó tartalma dönti el,
hogy találtunk legnagyobb közös osztót (közös>0), vagy nem (közös==0).
A feladat megoldása:
// Legnagyobb közös osztó keresése
private void button1_Click(object sender, EventArgs e)
{
int szám1, szám2, osztó, közös= 0;
if (textBox1.Text != "" && textBox2.Text != "")
{
szám1 = Int32.Parse(textBox1.Text);
szám2 = Int32.Parse(textBox2.Text);
osztó = 2;
közös = 0;
while (osztó <= szám1 && osztó <= szám2)
{
if(szám1 % osztó == 0 && szám2 % osztó == 0)
közös = osztó;
osztó++;
}
if (közös == 0)
textBox3.Text =
"Nincs legnagyobb közös osztójuk.";
else
textBox3.Text = "" + közös;
}
}
// Ha az első adat változik a korábbi eredmény törlődik
private void textBox1_TextChanged(object sender, EventArgs e)
{
textBox3.Text = "";
}
// Ha a második adat változik a korábbi eredmény törlődik
private void textBox2_TextChanged(object sender, EventArgs e)
{
textBox3.Text = "";
}
A program futási eredményei: