Írjunk programot, amely euklideszi algoritmus segítségével megkeresi két pozitív egész szám legnagyobb közös osztóját!
Az euklideszi algoritmus szerint, ha a kisebbik szám maradék nélkül megvan a nagyobbikban, akkor a kisebbik lesz a legnagyobb közös osztó. Ha van maradék, a legnagyobb közös osztó kisebb vagy egyenlő lesz a maradékkal. A következő próbálkozásnál a kisebbik szám lép az osztandó, a maradék pedig az osztó helyébe. Az algoritmus így mindaddig folytatódik, míg a maradék nulla nem lesz, ekkor az aktuális osztó lesz a legnagyobb közös osztó.
A feladat megoldása:
// Legnagyobb közös osztó Euklideszi algoritmussal
private void button1_Click(object sender, EventArgs e)
{
int szám1, szám2, osztó = 0, r;
if (textBox1.Text != "" && textBox2.Text != "")
{
szám1 = Int32.Parse(textBox1.Text);
szám2 = Int32.Parse(textBox2.Text);
if (szám1 > 0 && szám2 > 0)
{
do
{
r = szám1 % szám2;
if (r == 0)
osztó = szám2;
else
{
szám1 = szám2;
szám2 = r;
}
} while (r > 0 );
if (osztó == 1)
textBox3.Text =
"Nincs legnagyobb közös osztójuk.";
else
textBox3.Text = "" + osztó;
}
}
}
// 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: