BME MOGI Gépészeti informatika 5. 1. feladat Készítsen alkalmazást, mely feltölt egy egydimenziós tömböt adott tartományba eső, véletlenszerűen generált egész értékekkel! Határozza meg a legkisebb és a legnagyobb elemet, valamint azt, hogy ezen elemek sorban hányadik értékként találhatók meg a tömbben! Rendezze az elemeket nagyság szerint növekvő sorrendbe az Array osztály megfelelő metódusával, és bináris vagy szekvenciális kereséssel döntse el, hogy egy beolvasott érték előfordul-e a tömbben! A feladat megoldásához írja meg a következő metódusokat! a. Metódus egy sztringben tárolt adat egész számmá történő alakítására! Bemenő paraméter a sztring, kimenő paraméter az egész szám, visszaadott érték az igaz logikai érték, ha az átalakítás sikeres volt, különben a hamis logikai érték! Ha az átalakítás sikertelen, a metódus hozzon létre formátum kivételt! b. Metódus egy egydimenziós, egész tömb létrehozására, és feltöltésére véletlen egész számokkal! Bemenő paraméterek: a tömb mérete, annak a tartománynak az alsó és felső határa, amelyből az értékeket generálni kell. Visszaadott érték a generált tömb (hivatkozása)! c. Metódus egy egydimenziós, egész tömb elemeinek sztringben történő előállítására! Az elemeket vesszővel válassza el! Bemenő paraméterek: a tömb, visszaadott érték a sztring! d. Metódus egy egydimenziós, egész tömb legkisebb és legnagyobb elemének meghatározására! Bemenő paraméter a tömb, kimenő paraméterek a minimum és a maximum értéke. e. Metódus annak meghatározására, hogy egy egydimenziós, egész tömbben egy adott számmal mely tömbelemek egyenlők! Bemenő paraméter a tömb és a szám, visszaadott érték egy sztring, mely az indexeket vesszővel elválasztva tartalmazza! f. Metódus egy szám szekvenciális keresésére egydimenziós, egész tömbben! Bemenő paraméter a tömb és a szám! Visszaadott érték az igaz logikai érték, ha a szám előfordul a tömbben, különben a hamis logikai érték! Megoldási mód: Windows Forms alkalmazás Oktatási cél: egydimenziós tömbkezelés bemutatása, metódusok használata tömb argumentumokkal, minimum- és maximumkeresés, rendezés, bináris és szekvenciális keresés algoritmusának tárgyalása Az elkészítendő form: 1
A Form1 osztályba írandó programkód: const int maxméret = 100; int n = 0, minimum=0, maximum=0; int[] t = new int[maxméret]; int keresett = 0; private void button1_click(object sender, EventArgs e) if (BeolvasEgész(textBox1.Text, out n)) if (n<=0 n>maxméret ) MessageBox.Show("Hibás elemszám!"); return; t = Feltölt(n, 1, 100); textbox2.text=tömbkiír(t); MinMax(t, out minimum, out maximum); textbox3.text = minimum.tostring (); textbox4.text = maximum.tostring(); textbox5.text = Hányadik(t, minimum); textbox6.text = Hányadik(t, maximum); Array.Sort(t, 0, n); textbox7.text = TömbKiír(t); private bool BeolvasEgész(string mező, out int változó) 2
bool vissza = true; mező = "0" + mező; vissza = int.tryparse(mező, out változó); if (!vissza) throw new FormatException("Formátumhiba! " + mező); return vissza; private int[] Feltölt(int méret, int alsó, int felső) Random rnd = new Random(); int[] tömb = new int[méret]; for (int i = 0; i < méret; i++) tömb[i] = rnd.next(alsó, felső+1); return tömb; private string TömbKiír(int[] tömb) string s = ""; for (int i = 0; i < tömb.length; i++) s += tömb[i].tostring(); if (i<tömb.length-1) s += ", "; return s; private void button2_click(object sender, EventArgs e) if (BeolvasEgész(textBox8.Text, out keresett)) if (checkbox1.checked) if (Array.BinarySearch(t, keresett)>0) MessageBox.Show("A szám előfordul a tömbben."); else MessageBox.Show("A szám nem fordul elő a tömbben."); else if (talál(t,keresett)) MessageBox.Show("A szám előfordul a tömbben."); else MessageBox.Show("A szám nem fordul elő a tömbben."); 3
2. feladat private void MinMax(int[] tömb, out int min, out int max) max = int.minvalue; min = int.maxvalue; foreach (int elem in tömb) if (elem > max) max = elem; if (elem < min) min = elem; private void Form1_Load(object sender, EventArgs e) checkbox1.checked = true; private string Hányadik(int[] tömb, int elem) string s = ""; for (int i = 0; i < tömb.length; i++) if (tömb[i]==elem) s += (i+1).tostring()+", "; return s; private bool talál(int[] tömb, int szám) bool van = false; foreach (int elem in tömb) if (elem==szám) van = true; break; return van; Írjon konzolalkalmazást, amely véletlen egész értékekkel feltölt egy kétdimenziós tömböt! A mátrix méreteit és annak a számtartománynak a határait, melyből generálni kell az elemeket, kérje be a felhasználótól! Írja ki a mátrixot és a transzponáltját a képernyőre! Megoldási mód: konzolalkalmazás Oktatási cél: kétdimenziós tömbkezelés bemutatása 4
A programkód: static void Main(string[] args) Random rnd = new Random(); Console.WriteLine("Kérem a mátrix méreteit:"); int n = Convert.ToInt32(Console.ReadLine()); // sorok száma int m = Convert.ToInt32(Console.ReadLine()); // oszlopok száma Console.WriteLine("Kérem a generáláshoz a számtartomány határait:"); int alsó = Convert.ToInt32(Console.ReadLine()); int felső = Convert.ToInt32(Console.ReadLine()); int[,] t = new int[n, m]; Console.WriteLine(); Console.WriteLine("A mátrix"); for (int i = 0; i < n; i++) for (int j = 0; j < m; j++) t[i, j] = rnd.next(alsó, felső + 1); Console.Write("0,5",t[i,j]); Console.WriteLine(); Console.WriteLine(); Console.WriteLine("A mátrix transzponáltja"); for (int i = 0; i < m; i++) for (int j = 0; j < n; j++) Console.Write("0,5", t[j, i]); Console.WriteLine(); Console.ReadLine(); 3. feladat Készítsen alkalmazást, mely előállítja az alábbi négyzetes mátrixok egyikét: 5
egységmátrix, folytonos feltöltés 1-től nxn-ig a természetes számokkal, feltöltés az indexek összegével. A feltöltött mátrixot Label vezérlőben jelenítse meg, melynek betűtípusát állítsa Consolas vagy Courier betűtípusra. Írjon metódust, mely a formázott mátrixot sztringben adja vissza! Megoldási mód: Windows Forms alkalmazás Oktatási cél: kétdimenziós tömbkezelés gyakoroltatása Az elkészítendő form A Form1 osztályba írandó programkód: int n = 0; private void button1_click(object sender, EventArgs e) if (!int.tryparse(textbox1.text,out n) n<2 n>5) MessageBox.Show("Hibás adatmegadás!"); return; int[,] t = new int[n, n]; for (int i = 0; i < n; i++) for (int j = 0; j < n; j++) if (radiobutton1.checked ) if (i==j) 6
t[i, j] = 1; else t[i, j] = 0; else if (radiobutton2.checked) t[i, j] = i*n+j+1; else if (radiobutton3.checked) t[i, j] = i+j; textbox2.text = tömbkiír(t); private void Form1_Load(object sender, EventArgs e) radiobutton1.checked = true; private string tömbkiír(int[,] tömb) string s = ""; for (int i = 0; i < tömb.getlength(0); i++) for (int j = 0; j < tömb.getlength(1); j++) s += tömb[i, j].tostring() + "\t"; s += "\n"; return s; 7
Gyakorló feladatok - tömbkezelés 1. Készítsen konzolalkalmazást, melyben feltölt egy 30-elemű tömböt véletlen egész számokkal a [-50 ; 50] számtartományból! a. Írja ki a képernyőre egymás mellé a számokat, ha azonban a szám osztható öttel vagy nyolccal, emeljen sort! b. Írja ki a pozitív számokat a beolvasás sorrendjében és számoljuk meg, hogy hány páros van közöttük! Soronként tíz elem jelenjen meg! c. Írja ki a negatív elemeket fordított sorrendben! d. Vizsgálja meg, hogy egy beolvasott negatív szám előfordul-e a negatív számok között, és ha igen, akkor hányszor! e. Számítsa ki külön-külön az egyjegyű és a kétjegyű elemek átlagát! f. Keresse meg a legkisebb pozitív és a legnagyobb negatív elemet, és azt is írja ki, hogy ők melyik tömbelemben találhatók. 2. Készítsen Windows Forms alkalmazást, melyben töltsön fel egy N x M-es kétdimenziós valós tömböt -10 és 10 közötti véletlen egészekkel! N és M értékét is generálja, azok értéke 2 és 10 közötti legyen! a. Jelenítse meg formázva a tömböt egy Label vezérlőben, melynek betűtípusát előzőleg állítsa Consolas vagy Courier betűtípusra! b. Határozza meg a minimumot és a maximumot, és írja ki az értékeket egy-egy TextBox vezérlőbe! c. Írja ki külön-külön a minimummal és a maximummal azonos elemek indexeit egy ListBox vezérlőbe, soronként egy indexpárt megjelenítve! d. Számítsa ki a 2. oszlop elemei négyzetösszegének gyökét, és ossza el ezen oszlop elemeit a kiszámított értékkel, majd írja ki a tömböt! e. Vonja ki az 1. oszlop elemeiből a 2. oszlop elemeit, majd írja ki a tömböt! f. Cserélje meg az 1. sort a 2. sorral, és írja ki a tömböt! Az utolsó három feladatnál az eredményt egy új, kétdimenziós tömbben állítsa elő, a megjelenítéshez egy második Label vezérlőt használjon, hogy az eredeti mátrix látható maradjon! 3. Írjon Windows Forms alkalmazást, mely generál 5 lottószámot, majd bekér öt darab 1-90 közötti értéket, és meghatározza, hogy ezekkel a számokkal kitöltött lottószelvény hány találatos! 4. Készítsen címletező programot! Kérjen be egy beviteli mezőben egy összeget, és írja a képernyőre egy ListBox vezérlőbe, hogy ezt az összeget milyen címletekkel lehet kifizetni! (Használja a hivatalos magyar fizetőeszköz címleteit!) 5. Írjon Windows Forms alkalmazást, mely egy tízes számrendszerbeli számot átvált kettes számrendszerbe! Az adatbeolvasáshoz és az eredmény megjelenítéséhez használjon TextBox vezérlőket! 6. Készítsen Windows Forms alkalmazást, mely egy hetes számrendszerbeli szám tízes számrendszerbeli értékét határozza meg! A szám beolvasásakor ellenőrizze, hogy a szám számjegyei csak 0-6 közötti értékek lehetnek! 8
7. Készítsen konzolalkalmazást, mely egy billentyűzetről 9999 végjelig olvasott számsorozatot megvizsgál, hogy számtani vagy mértani sorozat-e! Számtani a sorozat, ha a n=(a n-1+a n+1)/2, mértani, ha a n2 =a n-1*a n+1 összefüggés teljesül az első és utolsó kivételével minden elemre! 8. Írjon Windows Forms alkalmazást, mely egy tömb elemeit 1 pozícióval eltolja a 0. elem irányába! A tömb régi első eleme legyen az utolsó, a második az első stb.! A tömböt véletlen számokkal töltse fel! Az eredeti és az eltolt tömb elemeit is többsoros TextBox vezérlőkben jelenítse meg, vesszővel tagolva! 9. Készítsen konzolalkalmazást, amely egy tömb elemeit kéri be billentyűzetről, de nem enged meg ismétlődést (két egyenlő értékű elemet nem fogad el)! 10. Írjon Windows Forms alkalmazást, mely egy véletlen számokkal feltöltött tömbben szereplő, különböző értékű elemeket egy másik tömbbe másolja. A tömböket ListBox vezérlőkben jelenítse meg! 11. Készítsen Windows Forms alkalmazást, amely egy polinom helyettesítési értékét számolja ki. A polinom együtthatóit egy a tömb tárolja! A polinom általános alakja a[0]*x n + a[1]*x n-1 + a[2]*x n-2 + a[n-1]*x+ a[n]. Az n és az x értékét olvassa be, a polinom együtthatóit véletlenszerűen generálja! 12. Készítsen konzolalkalmazást, mely feltölt egy tömböt véletlenszerűen 0-kal és 1-kel! Készítsen statisztikát egy másik tömbben az 1-es sorozatok (egymás utáni előfordulás) hosszáról! A darabszámokat tartalmazó tömb indexe jelezze, hogy az adott sorozat milyen hosszú. 13. Írjon Windows Forms alkalmazást, amely egy véletlenszerűen feltöltött tömbben megfordítja az elemek sorrendjét. 14. Írjon konzolalkalmazást, mely egy konstans négyzetes mátrixról eldönti, hogy bűvös négyzet-e! A bűvös négyzetben a sorok, az oszlopok és az átlók elemeinek összege egyenlő! Dolgozhat például a következő konstans tömbbel: int[,] tömb=4,9,8,11,7,3,6,5,10; 9