A feladatot kétféle módon oldjuk meg.
1. Feladat: Két egész típusú változó tartalmának felcserélése segédváltozó használatával.
A Form1_Load eseménykezelő eljárásban az x, y egész típusú változók tartalmát beállítjuk 72 és 37-re, majd megjelenítjük textBox1 és a textBox2 Text mezejében, az Enabled tulajdonság false-ra állítása biztosítja, hogy a számokat ne lehessen módosítani. A Form1_Load eseménykezelő a Form1 objektum betöltése után azonnal meghívódik, így már a globálisan deklarált x és y változók megkapják a beállított értékeket.
int x, y;
private void Cserél_Click(object sender, EventArgs e)
{
int m; // segédváltozó
m = x; // x tartalmát mentettük az m változóba
x = y; // x változóba írtuk a y tartalmát
y = m; // y változó felveszi az m értékét, amely x értéke
textBox3.Text = x.ToString(); textBox3.Enabled = false;
textBox4.Text = y.ToString(); textBox4.Enabled = false;
button1.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
x = 72; y = 37;
textBox1.Text = x.ToString(); textBox1.Enabled = false;
textBox2.Text = y.ToString(); textBox2.Enabled = false;
}
A program futási eredménye: alapállapot és a Cserél nyomógomb megnyomása után történik meg a csere.
2. Feladat: Két egész típusú változó tartalmának felcserélése segédváltozó nélkül.
Megoldás: A két egész típusú változó (x,y) tartalmának felcserélését segédváltozó használata nélkül a kizáró vagy (^) logikai művelet felhasználásával oldhatjuk meg.
x = x ^ y
y = y ^ x
x = x ^ y
A kizáró vagy állapot táblája
x y | x ^ y
-------------------
0 0 | 0
0 1 | 1
1 0 | 1
1 1 | 0
Legyen a x változó tartalma 72 és az y változóé 37. Alakítsuk át a két egész számot binárissá. Az átalakítandó számot osztjuk kettővel és a maradékot a választóvonal mögé írjuk, ha páros az eredmény, akkor 0, ha páratlan, akkor 1. Az utolsó eredményt az 1-et átmásoljuk a maradékok listájába.
72 | 0
36 | 0
18 | 0
9 | 1
4 | 0
2 | 0
1 | 1
Alulról felfelé leolvasva 1 0 0 | 1 0 0 0 | majd az elejére írt 0-val két byte
az x változó tartalma binárisan | 0 1 0 0 | 1 0 0 0 |
37 | 1
18 | 0
9 | 1
4 | 0
2 | 0
1 | 1
Alulról felfelé leolvasva 1 0 | 0 1 0 1 | majd az elejére írt 2 db 0 -val a két byte
az y változó tartalma binárisan | 0 0 1 0 | 0 1 0 1 |
x = x ^ y x | 0 1 0 0 | 1 0 0 0 |
y | 0 0 1 0 | 0 1 0 1 |
------------------------------
x | 0 1 1 0 | 1 1 0 1 |
y = y ^ x y | 0 0 1 0 | 0 1 0 1 |
x | 0 1 1 0 | 1 1 0 1 |
-------------------------------
y | 0 1 0 0 | 1 0 0 0 |
x = x ^ y x | 0 1 1 0 | 1 1 0 1 |
y | 0 1 0 0 | 1 0 0 0 |
-------------------------------
x | 0 0 1 0 | 0 1 0 1 |
Alapállapot Megtörtént a csere
x | 0 1 0 0 | 1 0 0 0 | x | 0 0 1 0 | 0 1 0 1 |
y | 0 0 1 0 | 0 1 0 1 | y | 0 1 0 0 | 1 0 0 0 |
int x, y;
private void Cserél_Click(object sender, EventArgs e)
{
x = x ^ y;
y = y ^ x;
x = x ^ y;
textBox3.Text = x.ToString(); textBox3.Enabled = false;
textBox4.Text = y.ToString(); textBox4.Enabled = false;
button1.Enabled = false;
}
private void Form1_Load(object sender, EventArgs e)
{
x = 72; y = 37;
textBox1.Text = x.ToString(); textBox1.Enabled = false;
textBox2.Text = y.ToString(); textBox2.Enabled = false;
}
A program futási eredménye: alapállapot és a Cserél nyomógomb megnyomása után történik meg a csere.