BME MOGI Gépészeti informatika 6. 1. feladat Készítsen Windows Forms alkalmazást véletlen adatokkal létrehozott körök kölcsönös helyzetének vizsgálatára! Hozza létre a következő struktúrákat, melynek elemei legyenek public elérésűek! Pont mezők: o double x, o double y, konstruktorok o double x_, double y_ paraméterekkel rendelkező konstruktor, ami inicializálja a mezőket, o Pont p paraméterrel rendelkező konstruktor, ami inicializálja a mezőket, Szakasz mezők: o Pont a, o Pont b, konstruktor o Pont a_, Pont b_ paraméterekkel rendelkező konstruktor, ami inicializálja a mezőket, metódusok: o Hossz a szakasz hosszát számítja ki, és adja vissza. Kör mezők: o Pont K, o double r, konstruktor o double x_, double y_, double r_ paraméterekkel rendelkező konstruktor, ami inicializálja a mezőket. A Generál gomb megnyomásakor a program hozzon létre két Kör objektumot, a kör középpontjának koordinátáit a [-10;10] intervallumból, a sugarakat a [0,1;10] intervallumból generált véletlen valós értékekkel inicializálja! Hozzon létre továbbá egy Szakasz objektumot a körök középpontjaiból! Írja ki a generált adatokat a form megfelelő TextBox vezérlőibe, majd vizsgálja meg, és a megfelelő RadioButton vezérlő értékének beállításával jelezze a körök kölcsönös helyzetét! Megoldási mód: Windows Forms alkalmazás Oktatási cél: struktúrák használatának bemutatása 1
Az elkészítendő form: A Form1 osztályba írandó programkód: struct Pont public double x, y; public Pont(double x_, double y_) x = x_; y = y_; public Pont(Pont p) x = p.x; y = p.y; ; struct Szakasz public Pont a, b; public Szakasz(Pont a_, Pont b_) a = new Pont(a_); b = new Pont(b_); ; public double Hossz() return Math.Sqrt(Math.Pow(a.x - b.x, 2) + Math.Pow(a.y - b.y, 2)); struct Kör 2
public Pont k; public double r; public Kör(double x_, double y_, double r_) k = new Pont(x_, y_); r = r_; private void Form1_Load(object sender, EventArgs e) radiobutton1.checked = true; private void button1_click(object sender, EventArgs e) double k1, k2, sugár1, sugár2; Random rnd = new Random(); k1 = rnd.nextdouble() * 20-10; textbox1.text = k1.tostring("f2"); k2 = rnd.nextdouble() * 20-10; textbox2.text = k2.tostring("f2"); sugár1 = rnd.nextdouble() * 10; textbox3.text = sugár1.tostring("f2"); Kör P = new Kör(k1, k2, sugár1); k1 = rnd.nextdouble() * 20-10; textbox4.text = k1.tostring("f2"); k2 = rnd.nextdouble() * 20-10; textbox5.text = k2.tostring("f2"); sugár2 = rnd.nextdouble() * 10; textbox6.text = sugár2.tostring("f2"); Kör Q = new Kör(k1, k2, sugár2); Szakasz Sz = new Szakasz(P.k, Q.k); if (Sz.Hossz() < sugár1 + sugár2) radiobutton1.checked = true; else if (Math.Abs(Sz.Hossz() - sugár1 - sugár2) < 0.001) radiobutton2.checked = true; else radiobutton3.checked = true; 3
Gyakorló feladatok - struktúrák 1. Készítsen Windows Forms alkalmazást paralelogrammák adatainak kezelésére! Hozza létre a következő struktúrát! Paralelogramma mezők: o double a, o double b, o double alfa, konstruktor o double a_, double b_, double alfa_ paraméterekkel rendelkező konstruktor, mely értékekkel a mezők inicializálásra kerülnek, metódusok: o Generál - argumentum nélküli metódus, mely az oldalakat az [1;30], a szöget a (0;180) intervallumból generált véletlen valós értékekkel inicializálja, o Terület a paralelogramma területét adja vissza, o Kerület a paralelogramma kerületét adja vissza, o Magasság a paralelogramma magasságát adja vissza, o RombuszE a visszaadott logikai értékkel jelzi, hogy a paralelogramma rombusz-e, o TéglalapE a visszaadott logikai értékkel jelzi, hogy az oldalak közbe zárt szöge 90 fok-e. A felhasználó választása szerint hozzon létre véletlen vagy beolvasott értékekkel egy paralelogrammát, és a Számít nevű metódusban számítsa ki és jelenítse meg a kerületét, területét és magasságát, illetve döntse el, hogy a paralelogramma rombusz-e, téglalap-e vagy négyzet-e! 4
2. Készítsen Windows Forms alkalmazást véletlen valós értékekkel feltöltött tömb elemei matematikai középértékeinek kiszámítására! Hozza létre a következő struktúrát! KözepekAdat mezők: o double[] tömb, o double harmonikus, o double mértani, o double számtani, o double négyzetes, konstruktor o double alsó_, double felső_ paraméterekkel rendelkező konstruktor, mely létrehoz egy 2 és 50 közötti véletlen méretű valós tömböt, és feltölti a tömböt az [alsó_;felső_] számtartományból generált véletlen valós értékekkel! A konstruktorban számolja ki továbbá a tömbelemek harmonikus, mértani, számtani és négyzetes közepét és ezekkel az értékekkel inicializálja a megfelelő mezőket! metódus: o TömbKiír pontosvesszővel tagolva előállítja a tömb elemei egy sztringben, ami a metódus által visszaadott érték lesz. A Számol gomb megnyomásakor olvassa be a számtartomány határait, azonban csak pozitív értékhatárokat fogadjon el! Ha az alsó határ nagyobb a felsőnél, cserélje meg az értékeket! Hozzon létre egy KözepekAdat típusú objektumot, majd írja ki a kiszámított értékeket a megfelelő TextBox vezérlőkbe! A középértékeket az alábbi módon számíthatja ki: Harmonikus közép: az elemek reciprokösszegét osztjuk az elemek számával. Mértani közép: az elemek szorzatából n-dik gyököt vonunk, ahol n az elemek száma. Számtani közép: az elemek összegét osztjuk az elemek számával. Négyzetes közép: az elemek négyzetösszegét osztjuk az elemek számával, majd a kapott értékből négyzetgyököt vonunk. 5