2.14. A goto utasítás
A következő feladatban a program helytelen adatokkal való működését akadályozzuk meg egy hátultesztelő ciklus és a goto utasítás segítségével. A goto-val bárhová ugorhatunk, csak meg kell adni a címke nevét a goto után, és el kell helyezni a program megfelelő pontjára a cimkét (kettősponttal lezárva) oda, ahova a vezérlésnek ugrani kell.
21. feladat
Kérjük be a másodfokú egyenlet együtthatóit, és számítsuk ki a gyököket 2 tizedes pontossággal! Ha a diszkrimináns negatív, írjuk ki a képernyőre: "Nincs megoldás"! Ha az a értéke 0, figyelmeztessük a felhasználót, és kérjük be újra az adatot! Ha a felhasználó 3-nál többször hibázik lépjünk ki a programból! Név: Másodfokú.
Megoldás:
static void Main(string[] args)
{
double a = 0, b = 0, c = 0, d = 0, x1 = 0, x2 = 0;
int hiba = 0;
Console.WriteLine(" Másodfokú egyenlet gyökeinek számítása:");
Console.WriteLine();
do
{
if (hiba == 4) goto vege;
Console.Write(" a=");
a = Convert.ToDouble(Console.ReadLine());
if (a == 0) Console.WriteLine(" Az a nem lehet 0, mivel ekkor nem másodfokú az egyenlet!");
hiba++;
} while (a == 0);
Console.Write(" b=");
b = Convert.ToDouble(Console.ReadLine());
Console.Write(" c=");
c = Convert.ToDouble(Console.ReadLine());
d = b * b - 4 * a * c;
Console.WriteLine();
if (d < 0)
{
Console.WriteLine(" Nincs megoldás");
}
else
{
x1 = (-b + Math.Sqrt(d)) / (2 * a);
x2 = (-b - Math.Sqrt(d)) / (2 * a);
Console.WriteLine(" x1={0:0.00} x2={1:0.00}", x1, x2);
}
vege:
Console.ReadKey();
}
A program matematikai része már a 10. feladatban látható volt. Most egy hátultesztelő ciklussal megakadályozzuk az a=0 érték bevitelét. A ciklusban a hiba változó értékét növeljük. Ha túllépi a 3-at, akkor a goto utasítással kilépünk a ciklusból a program végén lévő vege címkére.
Hasonló eredményt érnénk el, ha a goto vege helyett a return utasítást használnánk, mivel a return utasítással kiléphetünk egy utasításcsoportból úgy, hogy a return után álló utasítások nem lesznek végrehajtva. Ekkor természetesen a vege: címkére sincs szükség.