BME MOGI Gépészeti informatika 3. 1. feladat Végezze el a következő feladatokat! Kérjen be számokat 0 végjelig, és határozza meg az átlagukat! A feladat megoldásához írja meg a következő metódusokat! a. Metódus egy szám ellenőrzött beolvasására! Kimenő paraméter: a szám, a visszaadott érték igaz, ha sikeres volt a beolvasás! b. Metódus a számok átlagának kiszámítására és kiírására! Bemenő paraméterek: a darabszám és az összeg! Határozza meg azt a legnagyobb faktoriális értéket, ami kisebb, mint százmillió! a. Elkészítendő metódus: adott szám faktoriálisának kiszámítása! Bemenő paraméter a szám, visszaadott érték a kiszámított faktoriális érték! Megoldási mód: konzolalkalmazás Oktatási cél: ciklusok használatának bemutatása do while, while, for, számlálás, összegzés, szorzatképzés módjának ismertetése A programkód: static void Main(string[] args) // olvassunk be számokat 0 végjelig, és határozzuk meg az átlagukat double szám=0, összeg=0; int darab=0, n=0; bool vanszám = false; do vanszám = EgySzámBeolvas(out szám); if (vanszám && szám!= 0) darab++; összeg += szám; while (!vanszám szám!=0); ÁtlagKiír(darab, összeg); // keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió while (Faktoriális(n)*(n+1)<=100000000) n++; Console.WriteLine("\nA legnagyobb érték: 0!=1", n, Faktoriális(n)); Console.ReadLine(); static bool EgySzámBeolvas(out double érték) bool sikerült = true; Console.WriteLine("Kérek egy valós számot:"); 1
if (!double.tryparse(console.readline(), out érték)) Console.WriteLine("Adatmegadási hiba!"); sikerült = false; return sikerült; static void ÁtlagKiír(int db, double szum) if (db!= 0) Console.WriteLine("A számok átlaga: " + (szum / db).tostring("f2")); else Console.WriteLine("Az osztó nem lehet nulla!"); static long Faktoriális(int n) long fakt = 1; for (int i = 1; i <= n; i++) fakt *= i; return fakt; 2. feladat önálló feldolgozásra Generáljon 1 és 100 közötti véletlen egész számokat mindaddig, amíg a szám nem osztható egy előre megadott számmal! A generált számokat ListBox vezérlőkben jelenítse meg, az egyikben a prímszámokat, a másikban az összetett számokat! Összetett számoknak nevezzük azokat a természetes számokat, amelyeknek 2-nél több, de véges számú osztója van (vagyis: van legalább egy valódi osztójuk)! Írja ki egy többsoros TextBox vezérlőbe egy kiválasztott összetett szám valamennyi osztóját! Tegye lehetővé a listákból az elemtörlést, mégpedig külön-külön a páros összetett, a páratlan összetett, valamennyi összetett és valamennyi prímszám törlését! A feladat megoldásához írja meg a következő metódusokat! 2
a. Metódus annak vizsgálatára, hogy egy szám prímszám-e! Bemenő paraméter: a szám, a visszaadott érték az igaz logikai érték, ha a szám prím, különben a hamis logikai érték! b. Metódus egy listából adott tulajdonságú elemek törlésére! Bemenő paraméterek: a listavezérlő és egy logikai érték, ez utóbbi azt jelzi, hogy a páros vagy a páratlan számokat kell-e törölni a listából! Megoldási mód: Windows Forms alkalmazás Oktatási cél: ciklusok és metódusok írásának gyakoroltatása, ListBox vezérlő használata elem beszúrása, elemtörlés, elem kiválasztása, vezérlő átadása paraméterként Az elkészítendő form: A Form1 osztályba írandó programkód: private void Form1_Load(object sender, EventArgs e) radiobutton1.checked = true; private void button1_click(object sender, EventArgs e) int szám=1, osztó; Random rnd = new Random(); if (!int.tryparse(textbox1.text,out osztó)) MessageBox.Show("Hibás adatmegadás!"); return; while (szám % osztó!=0) 3
szám = rnd.next(1, 101); if (PrímE(szám) &&!listbox2.items.contains(szám)) listbox2.items.add(szám); else if (!PrímE(szám) &&!listbox1.items.contains(szám)) listbox1.items.add(szám); private bool PrímE(int érték) bool prím = true; for (int i = 2; i < Math.Sqrt(érték)+1; i++) if (érték % i==0) prím = false; return prím; private void ElemTöröl(ListBox lista, bool páratlan) int i = 0; int maradék = (páratlan)? 1 : 0; do if (Convert.ToInt32(lista.Items[i].ToString()) % 2 == maradék) lista.items.removeat(i); i--; i++; while (i < lista.items.count); private void button2_click(object sender, EventArgs e) if (radiobutton1.checked) ElemTöröl(listBox1, false); else if (radiobutton2.checked) ElemTöröl(listBox1, true); else if (radiobutton3.checked) listbox1.items.clear(); else if (radiobutton4.checked) listbox2.items.clear(); if (!radiobutton4.checked) 4
textbox2.text = ""; private void listbox1_click(object sender, EventArgs e) int szám = int.parse(listbox1.items[listbox1.selectedindex].tostring ()); textbox2.text = ""; for (int i = 1; i <= szám; i++) if (szám % i==0) textbox2.text += i.tostring(); if (i!=szám) textbox2.text += ", "; 3. feladat önálló feldolgozásra Készítsen alkalmazást, mely egy négyműveletes számológép funkcióit valósítja meg! A számokat TextBox vezérlőben lehessen megadni, a műveleti jelek és az "=" jel kombinált listából (ComboBox) legyen kiválasztható! Az elvégzett műveletek és az eredmény egy ListBox vezérlőben jelenjenek meg! Valósítson meg ellenőrzött adatbevitelt a számoknál és a műveleti jeleknél is! Tegye lehetővé egy gomb segítségével a vezérlőelemek adatainak törlését! A gomb csak akkor legyen kiválasztható, ha a felhasználó már végrehajtott valamilyen műveletet! Megoldási mód: Windows Forms alkalmazás Oktatási cél: ComboBox vezérlő használatának bemutatása, sztring és sztring tömb kezelésének ismertetése Az elkészítendő form: A Form1 osztályba írandó programkód: 5
double szám, eredmény; string művelet; private void combobox1_selectedindexchanged(object sender, EventArgs e) listbox1.items.add(string.format("0,51,15", szám, combobox1.text)); if (listbox1.items.count == 2 művelet=="=") eredmény = szám; else switch (művelet) case "+": eredmény += szám; case "-": eredmény -= szám; case "*": eredmény *= szám; case "/": eredmény /= szám; művelet = combobox1.text; if (művelet=="=") listbox1.items.add(string.format("0,5", eredmény)); button1.enabled = true; private void combobox1_textupdate(object sender, EventArgs e) if (combobox1.text.length>1) MessageBox.Show("Csak egy karakteres művelet megengedett!"); return; if (!("+-*/=".Contains(comboBox1.Text))) MessageBox.Show("Csak listaelem megengedett!"); private void textbox1_textchanged(object sender, EventArgs e) bool jó = double.tryparse(textbox1.text, out szám); if (textbox1.text!="" && textbox1.text!= "+" && textbox1.text!= "-" &&!jó) MessageBox.Show("Csak valós szám megengedett!"); private void Form1_Load(object sender, EventArgs e) 6
string[] s = "-", "*", "/", "=" ; combobox1.items.add("+"); combobox1.items.addrange(s); listbox1.items.add("szám Művelet"); button1.enabled = false; private void button1_click(object sender, EventArgs e) textbox1.text = ""; listbox1.items.clear(); listbox1.items.add("szám Művelet"); listbox1.multicolumn = false; combobox1.text = ""; button1.enabled = false; 7
Gyakorló feladatok - ciklusok 1. Készítsen Windows Forms alkalmazást, mely addig generál két egész számot a [-50 ; 50] számtartományból, amíg az egyik pozitív, a másik negatív nem lesz! Írja ki a formra a generált számokat az abszolút értékük szerint csökkenő sorrendben! ( x kiszámítása Math.Abs(x) )! 2. Írjon Windows Forms alkalmazást, mely két 1 és 100 közötti egész számot generál mindaddig, amíg az egyik osztja a másikat (vagy A osztója B-nek, vagy B osztója A-nak)! Írja ki a formra a számokat, a hányadost és azt is, hogy hányszor kellett megismételni a generálást! 3. Írjon konzolalkalmazást, mely meghatározza, hogy hány páros számot kell összeszorozni kettőtől kezdve, hogy a szorzatuk nagyobb legyen, mint 100000! 4. Készítsen Windows Forms alkalmazást, ami két kockával 10 kockadobást szimulál! A dobások eredményét egy ListBox vezérlőben jelenítse meg, egy kísérlet két értékét egymás mellett, a különböző kísérletek adatait viszont új sorban! Számolja meg és írja ki, hogy a gép hányszor dobott egyforma értékeket! 5. Írjon konzolalkalmazást, mely táblázatos formában a képernyőre írja a sin(x) függvény értékeit adott foktól adott fokig, egy meghatározott lépésközzel! A sin(x) függvénynek a szöget radiánban kell megadni. Az átszámítási képlet: radián=fok* /180. Az eredménylistában a függvényérték előtt a fokok is jelenjenek meg. 6. Készítsen Windows Forms alkalmazást, mely a form betöltésekor feltölt egy kombinált listát 10 darab, az [1;100] tartományba eső, véletlenszerűen generált, egész számmal! A listából egy tetszőleges érték (n) kiválasztásakor végezze el a következő műveleteket: a. írja ki egy ListBox vezérlőbe 1-től n-ig a páros számokat. b. adja össze 1-től n-ig az 5-el osztható számokat, és jelenítse meg az eredményt egy TextBox vezérlőben, c. számolja meg, és jelenítse meg egy TextBox vezérlőben, hogy hány szám osztható 1-től n-ig 11-el! Tegye lehetővé egy-egy gombbal a lista és a beviteli mezők törlését, valamint a kombinált lista tartalmának újragenerálását! 7. Készítsen Windows Forms alkalmazást, mely egy ListBox vezérlőben megjeleníti azokat a pitagoraszi számhármasokat, ahol mindhárom szám 1-100 közötti! Pitagoraszi számhármas: két szám négyzetösszege egyenlő a harmadik szám négyzetével. Minden számhármas csak egyszer jelenjen meg, azaz nem tekintjük különbözőnek, ha csak a számok sorrendje változik meg. 8. Készítsen konzolalkalmazást, mely három darab dobókockával szimulál kockadobást, és figyeli a dobások összegét. A tapasztalat az, hogy a három kocka számainak összege jóval többször lesz 10, mint 15. 10000 dobás alapján határozza meg a program, hogy mennyi a gyakorisága a 10 és a 15 összegek előfordulásának. 9. Írjon Windows Forms alkalmazást, mely ellenőrzötten beolvas egy 1 és 20 közötti egész számot (n), majd meghatározza az első n Fibonacci-számot! A számokat egy többsoros TextBox vezérlőben jelenítse meg vesszővel elválasztva! A Fibonacci-számok képzésének módja: az első két szám 0 és 1, a további számokat az őket közvetlenül megelőző két szám összege adja. 10. Készítsen konzolalkalmazást, mely a képernyőre írja helyiérték-helyesen egymás alá a kettes szám első 32 hatványát! 11. Egy konzolalkalmazásban olvasson be egy egész számot, majd írja vissza egyesével, egymás alá, fordított sorrendben a számjegyeit! A számjegyekre bontás menete: a. veszi a szám 10-el való osztási maradékát ez adja a számjegyeket jobbról balra, 8
b. majd elosztja - egész osztást használva - 10-el a számot. 12. Írjon Windows Forms alkalmazást, mely meghatározza a háromjegyű Armstrong-számokat, amelyeknek a jegyeit külön-külön a harmadik hatványra emelve, és ezeket összeadva az eredeti számot kapjuk vissza! A számokat egy többsoros TextBox vezérlőben jelenítse meg! A számjegyekre bontáshoz lásd az előző feladatot! Például, 153 = 1 3 +5 3 +3 3. 13. Készítsen konzolalkalmazást, mely kiírja a képernyőre a 10x10-es szorzótáblát! A kiírásnál formázza úgy a számokat, hogy helyiérték-helyesen, egymás alatt jelenjenek meg! 14. Írjon konzolalkalmazást, mely kiírja a számjegyeket a következő formában! 0123456789 012345678 01234567 0123456 012345 01234 0123 012 01 0 9