Keresés

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

  • Karma

    félisten

    válasz zsambek #5511 üzenetére

    Üdv újra. Már készültem rákérdezni, hogy mi újság a gyakorlással. :)

    1) Túlkomplikáltad ezt az árszámítást matek és C# oldalon is. C# oldalon azért, mert a Convert.ToDouble hívás felesleges, matek oldalon meg azért, mert ha jó képletet választasz a kerekítés előtti árhoz, nem kell ifelned meg kézzel +71-et hozzáadni.

    Van a Math.Ceiling függvény, ami visszaadja a double számhoz legközelebbi, annál nem kisebb egészt. Azaz például 4 -> 4, 4.1 -> 5, 4.9 -> 5, stb.

    Ezt kihasználva az árszámítás (57-68. sorod) ennyire alakul át:
    jegyek[j].fizetnivalo = (int)(Math.Ceiling((jegyek[j].le - jegyek[j].fel) / 10.0) * 71);

    A 10.0 nagyon fontos, mert enélkül maradékos osztást csinál a fordító!

    A magyar ötforintos kerekítésre sajnos nem alkalmas a Math.Round. De még egy teljesen naív switches megoldás is teljesen kielégítő:

    int diff = 0;

    switch (fizetendo % 10) {
    case 0:
    case 1:
    case 2:
    diff = 0;
    break;
    case 3:
    case 4:
    case 5:
    case 6:
    case 7:
    diff = 5;
    break;
    case 8:
    case 9:
    diff = 10;
    break;
    }

    fizetendo = fizetendo / 10 * 10 + diff;

    A /10*10 maradékos osztással levágja az utolsó számjegyet, a diff meg az a szám, amit a kerekítés miatt hozzá kellett csapni.

    2) Ez a megközelítés nem biztos, hogy jó eredményre vezet, ha az első megállónál senki se szállt fel, vagy mindenki leszállt már az utolsó előtt. Biztonságosabb, ha a vizsgáló ciklusodat úgy futtatod, hogy a másodiktól az utolsó előtti megállóig fusson (így a szélsőkkel nem foglalkozol).

    3) Úgy látom két hiba biztosan van a hetedik feladatodban: egyrészt 48 ülés helyett 49-cel operálsz (a félreindexelés halálfejes hiba); másrészt a 183. sorban lévő belső ciklus teljesen felesleges. Nem is használod a ciklusváltozóját.

    De egyébként az elvben nem látok hibát.

    A futás közbeni állapotot úgy tudod követni, hogy egy breakpointot raksz a programodba a forráskód bal szélén lévő sávra kattintva. Ekkor ott egy piros kör jelenik meg, és a futás leszünetelődik amikor odaér.
    Ekkor a Locals fülön, alapból bal lenn látod a változóid aktuális értékét.

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

Hirdetés