Hirdetés

Keresés

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

  • Szmeby
    tag

    köszönöm szépen!

    A 2016-os érettséginél mivel érdemes feldolgozni a txt fájlt?
    - F jeleni egy-egy vásárlás végét, a többi sor egy-egy árucikk.
    - Alapvetően minden 500Ft, de ha többet vesz, kap kedvezményt. 2 db- 450, 3 db-tól 400Ft.
    Példa txt fájl:
    toll
    F
    colostok
    HB ceruza
    HB ceruza
    HB ceruza
    F
    colostok
    toll
    F
    szatyor
    csavarkulcs

    Kétdimenziós tömbbe tegyem? Ott azonos típusúnak kell lennie mindnek nem? Tehát nem tudom egyszerűen megsorszámozni, hogy 1-es vásárlás/toll stb... Bár van mód oda vissza konvertálni string-int között.
    Hash map-pel? Ez tűnik leginkább logikusnak. Itt is belefutok abba, hogy azonos típusnak kellene lennie?

    Ez a leírás kicsit kaotikus lett számomra. Mi az elvárt eredmény? A "feldolgozni" elég elvont fogalom. A tömb / HashMap vs. típus problémát sem igen értem.

    Amúgy meg a szép megoldás olyami lenne, hogy van számla objektumod, ami tételek listáját tartalmazza. Van tétel objektumod, aminek van neve, mennyisége, egységára, nettó összege. A kedvezmény tipikusan külön tételként jelenik meg, de aggregálhatod is az aktuális tétellel, vagy akár bevezethetsz egy kedvezmény típust is (ami kísértetiesen fog hasonlítani a tétel típusra).
    Soronként beolvasod a fájlt, létrehozol egy új számla objektumot, minden sornál egy új tétel objektumot, F esetén a számla objektum kész, bedobod egy listába és jöhet a következő friss számla.
    Ezt lehet cizellálni, elindulni OOP irányba, hogy nem soronként jön létre tétel, hanem már létező nevű tételnél csak a meglévő mennyiségét növeled eggyel. Vagy elindulhatsz a minimalista irányba, nincs tétel objektum, hanem a számla fenntart egy map-et, a kulcs a tétel neve (String), az érték pedig a darabszám (Integer), és azt növelgeted szükség esetén.
    Végül a kedvezményszámítás már könnyen megy, ha előállt a számlán az összes tétel, mennyiségtől függően kiosztasz nekik egy-egy egységárat, és abból már számolható lesz a nettó. Akár on-the-fly, nem nehéz számítás.

  • usergefi
    csendes tag

    A 8.feladatot se értem, amikor megnézi, hogy melyik prím számot nem húzták ki. Hogy megy végig a tömbön? Miért az a feltétel, hogy if( szamokDb[sz-1] == 0 )? A java-t pont ezért nem szerettem sose, mert nem látom át. De hát ez a legkeresettebb nyelv, szóval kénytelen leszek megszeretni. :)

    A szamokDb tömbben az szerepel, hogy az adott számot hányszor húzták ki:

    szamokDb[szamok[i][j]-1]++

    A szamok[I][j] az egyes számok lesznek, a fájlban elindulva pl. 37, 42, 44, 61, 62, 18, 42 stb...
    Kivon még belőle egyet, hogy 0-tól induljon a tömb indexelése (erre mondjuk nem vágom, miért van szükség), így aztán például a legelső esetben a fenti kódrész: szamokDb[37-1]++, a második számnál: szamokDb[47-1]++ és így tovább. Tehát a szamokDb azt fogja tárolni, hogy melyik számot hányszor húzták ki, a tömb indexe lesz a szám-1, amit kihúztak, az értéke pedig hogy hányszor.

    Aztán a kérdéses résznél 2-esével ugrálunk 0-tól kezdve. Mivel -1-et kivontunk, ezért a 0-ás index igazából az 1-es szám, a 2-es a 3-as, a 4-es az 5-ös és így tovább. Majd az értékeket hozzáadjuk a páratlan szám számlálóhoz. Ha mondjuk 1-esből volt 3, 5-ösből 2, akkor eddig 5 páratlan számod lesz.

    A 8-as feladatnál az általad kérdezett 0-e feltételnek is a fentiekben találod meg az értelmét, ha az érték 0, az azt jelenti, hogy egyszer sem húzták ki. Ugyanúgy végigmegyünk a szamokDb tömb prímszámos idexein (megint -1), és megnézzük, hogy kihúzták-e (>0 az értéke), vagy sem (==0).

    A te megoldásod is tökéletes lenne, a fenti megvalósítás nekem is túl absztrakt :)

    Amúgy meg ha ezt a nyelvet fogod használni, akkor sosem kell ilyen kódot írnod majd, vagy max nagyon specifikus esetekben. Ez tipikus magyar oktatásbeli hülyeség, hogy egy olyan nyelvet, amiben az objektum orientáltságot, beépített könyvtárakat és függvényeket, skálázhatóságot, több szálúságot kéne használni (mert erre való), arra kényszerítünk, hogy több dimenziós primitív tömbökkel szivassuk a jónépet :(

  • Victoryus
    addikt

    Köszönöm! Még egy kis segítséget kérnék. Adott a 2005-ös emelt érettségi lottós feladata. Találtam is egy jó oldalt (webotlet.hu) ahol elég szépen össze van szedve a java nyelvről sok minden. Itt fent van a lottós feladat megoldása is.
    Amit nagyon nem értek, hogy hogyan számolja meg a páratlan számokat? (6. feladatrész) Ha kiíratom a szamokDb érékeit ezt adja:
    4 2 2 6 1 0 2 1 3 0 5 6 5 0 4 3 5 3 4 2 2 1 3 2 2 2 2 4 1 5 5 0 2 4 1 6 5 2 3 2 1 4 3 2 4
    De miért? Én mondjuk soronként megszámolnám mennyi a páratlan szám, vagy az összeset beolvasnám és egyesével megvizsgálnám párosak-e, de itt valami mást csinál. No ezt nem értem, hogy mit is?
    Ezek az adatok:
    37 42 44 61 62
    18 42 54 83 89
    5 12 31 53 60
    1 28 47 56 70
    54 56 57 59 71
    7 21 33 39 86
    21 29 37 48 68... 51 sor van összesen a txt fájlban.

    A 8.feladatot se értem, amikor megnézi, hogy melyik prím számot nem húzták ki. Hogy megy végig a tömbön? Miért az a feltétel, hogy if( szamokDb[sz-1] == 0 )? A java-t pont ezért nem szerettem sose, mert nem látom át. De hát ez a legkeresettebb nyelv, szóval kénytelen leszek megszeretni. :)

  • Sirpi
    senior tag

    Az első 100 prímszámot szeretném tömbbe kiiratni. Ezzel a kódommal az a gond, hogy az üres elemeket is beleteszi a tömbbe. Mit szúrtam el?
    public class prim100 {
    public static void main(String[] args) {
    boolean prim = true;
    int szamlalo = 0;
    int tomb[]=new int[1000];
    int i = 1;
    do{
    i++;
    prim = true;
    for (int j = 2; j <= Math.sqrt(i); j++){
    if (i % j == 0){
    prim = false;
    break;
    }
    }
    if(prim == true){
    System.out.print(i + " ");
    tomb[i]=i;
    szamlalo++;
    }
    }while(szamlalo != 100);

    // tömb elemeinek kiíratása
    System.out.println("\n" +"A tömb elemei:");
    for( int k = 0; k < tomb.length; k++ )
    {
    System.out.print(tomb[k]+" ");
    }
    }
    }

    Itt a hiba:
    tomb[i]=i;

    ehelyett ez kell:
    tomb[szamlalo]=i;

    és a tomb elég, ha 100 elemű

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

Hirdetés