A InfoWiki wikiből
(Változatok közti eltérés)
WikiSysop (vita | szerkesztései)
(Új oldal, tartalma: „<cim cim3="10. gyakorlat - Diákok listája" cim2="Magasszintű Programozási Nyelvek I." cim1="Gyakorlat anyaga" prev="mp2/gyak090" back="EBooks" next="mp2/gyak...”)
Újabb szerkesztés →
A lap 2009. december 13., 13:14-kori változata
Diákok rekordjait fűzzük listába (20 db rekord, véletlen értékekkel kitöltve). A listát rendezzük életkor szerint csökkenő sorrendbe oly módon, hogy megkeressük minden menetben a legöregebb diákot, és adatait áttesszük egy másik listába (az eredetiből pedig töröljük). Ezt addig kell folytatni, amíg az eredeti lista üres nem lesz. A törléshez ismerni kell a diák rekord listabeli pozícióját (sorszámát). A rendezett rekordokat irassuk ki a képernyőre, majd határozzuk meg a [20,40] év közötti diákok ösztöndíjainak összegét.
A megoldás során közös (megosztott) változót nem, de függvény paramétereket és visszatérési értékeket használhatunk.
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication3 { class diak { public string nev; public int eletkor; public int osztondij; public double atlag; } class Program { static Random rnd = new Random(); //................................................................. static diak egy_rekord_random() { diak r = new diak(); r.nev = String.Format("diak {0}", rnd.Next(1, 1000)); r.eletkor = rnd.Next(18, 50); r.osztondij = rnd.Next(50, 500) * 100; r.atlag = rnd.Next(10, 51) / 10d; return r; } //................................................................. static diak egy_rekord_bill() { diak r = new diak(); r.nev = Console.ReadLine(); r.eletkor = int.Parse(Console.ReadLine()); r.osztondij = int.Parse(Console.ReadLine()); r.atlag = double.Parse(Console.ReadLine()); return r; } //................................................................. static void feltoltes(List<diak> l, bool veletlenszeruen) { for (int i = 0; i < 20; i++) { diak d ; if (veletlenszeruen) d=egy_rekord_random(); else d = egy_rekord_bill(); l.Add(d); } } //................................................................. static void kiiras(List<diak> l) { foreach (diak r in l) Console.WriteLine("{0,6}, {1,-10}, {2}, {3}", r.osztondij, r.nev, r.eletkor, r.atlag ); } //................................................................. static diak legoregebb(List<diak> l) { diak m = l[0]; foreach (diak x in l) if (x.eletkor > m.eletkor) m = x; return m; } //................................................................. static int legoregebb_indexe(List<diak> l, diak p) { for (int i = 0; i < l.Count; i++) if (l[i] == p) return i; return -1; } //................................................................. static void rendezes(List<diak> elso, List<diak> masodik) { while (elso.Count > 0) { diak p = legoregebb(elso); masodik.Add(p); int i = legoregebb_indexe(elso, p); if (i != -1) elso.RemoveAt(i); else break; } } //................................................................. static void atvalogat(List<diak> e, List<diak> m, int also, int felso) { foreach (diak r in e) if (also <= r.eletkor && r.eletkor <= felso) m.Add(r); } //................................................................. static int oszt_osszege(List<diak> l) { int ossz = 0; foreach (diak r in l) ossz = ossz + r.osztondij; return ossz; } //................................................................. static void oszt_kiir(int sum) { Console.WriteLine("az osztondijak osszege={0}",sum); } //................................................................. static void Main(string[] args) { List<diak> elso = new List<diak>(); feltoltes(elso, true); // kiiras(elso); //--- // Console.WriteLine("------"); List<diak> masodik = new List<diak>(); rendezes(elso, masodik); kiiras(masodik); //--- List<diak> harm = new List<diak>(); atvalogat(masodik, harm,20,40); // Console.WriteLine("------"); // kiiras(harm); int sum = oszt_osszege(harm); oszt_kiir(sum); Console.ReadLine(); } } }