Hirdetés

Új hozzászólás Aktív témák

  • Karma

    félisten

    válasz vimes #5365 üzenetére

    Nos akkor.

    Egy általános észrevétel előre. Úgy látom a közoktatás le van ragadva azon a szinten, hogy korlátozott Pascal programozást tanítanak C# nyelven. (Erről már volt szó korábban, csak bebizonyosodik.)ű

    Azt még elfogadom sok szemöldökborzolás mellett, hogy a LINQ 2 Objectset nem tanítják - mert így az összes érettségi feladat megoldható lenne egy-egy sorban -, de tömbök? Komolyan? Mindkettőtöknél nagyon megy ez, ezért hiszem hogy valami központi oka van...

    Konkrétan akkor a bajok. A kozmetikai dolgokba, mint kis-nagybetűk, nem megyek bele.

    Ott kezdődik, hogy static tagváltozókban van az adat, de mégis minek? A main függvény dolgozik csak vele, simán mehet oda lokális változónak. A static adatmezők, más néven globális változók csak bajt hoznak, ha hozzászoktok, és mondjuk a jövőben programozni is akartok. Más szakmák esetén mindegy; de akkor a hozzászólásom többi része is irreleváns.

    Az adat struktúra elmegy szódával, viszont mint mondtam, nem tömbben kéne tárolni. Vannak a C#-ban nagyon jó lista szerkezetek, amik tudják magukról, hogy hány elem van bennük - ezzel az ind változó feleslegessé válik.

    A List<T> a legegyszerűbb ezek közül. A Count-on keresztül eléred az aktuális darabszámot, és vannak metódusai elem hozzáadáshoz (Add) és törléshez is (Remove). Meg lehet szögletes zárójellel az akárhanyadik elemet manipulálni.

    Tehát így néz ki a program eleje eddig:

    ...

    class Program
    {
    struct adat
    {
    public int nap, dik, tav;
    }

    static void Main(string[] args)
    {
    var fuvar = new List<adat>();
    ... folyt köv...
    }
    }

    Az első feladatnál is kéne használni usingot a StreamReader köré. Ezen kívül a karakterenként feldolgozás feleslegesen lábbalhajtós. A soronkénti beolvasásig jó, utána kitör a WWIII. A sort fel tudod darabolni a Split metódussal a szóközök mentén, és azonnal kipotyog a három külön szöveg.

    // 1. feladat
    string sor = sr.ReadLine();

    while (sor != null)
    {
    string[] elemek = sor.Split(' ');
    adat f = new adat();
    f.nap = int.Parse(elemek[0]);
    f.dik = int.Parse(elemek[1]);
    f.tav = int.Parse(elemek[2]);
    fuvar.Add(f);

    sor = sr.ReadLine();
    }

    Egy csöppet rövidebb és olvashatóbb, nem?

    Aztán mivel nincs ind, a ciklusokat fuvar.Count-ig kell járatni. Ez több helyen változtat a dolgon.

    Na most első körben itt megállnék, mert nem akarom túlterhelni a fórumot. Egy kicsit nehezemre esik LINQ nélkül gondolkodni, mert tényleg egy sorba összeesnének vele a feladatok :) De lehet inkább beadom a derekam és bevillantom a szebb világ képét.

    Még annyi, hogy az üres else {} ágakat teljesen felesleges kiírni, de legalább olvashatatlan.

Új hozzászólás Aktív témák