Hirdetés

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

  • buherton
    őstag

    Sziasztok!

    Egy olyan problémám lenne, hogy van egy fájlom, benne jó nagy számokkal, melyek előjellel együtt 100 karakternél nem hosszabbak, ám így az összes, C-ben előforduló default típusnál nagyobbak. A sorok végét végjel (gondolom \n) jelzi.

    A fájlban egy sorban egy érték szerepel. Újabb sorban a műveleti (összeadás vagy kivonás) jel. Előjeltelenül szerepelnek a pozitiv számok, illetve előjelesen a negatívak. A műveletsor végét egy = jel zárja.

    Ami hirtelen eszembe jutott a megoldást illetően:

    Karaktertömbben tárolni a számjegyeket, ám ekkor azzal a problémával találtam szembe magam, hogy a karakterek ASCII kódja tárolódik, magyarán ha jól gondolom el kell az egészet tolnom 48-cal, hogy megkapjam a valódi számokat.

    Összeadás: Tfh. fel van töltve a két karaktertömböm. Hogyan tovább? Félreértés ne essék, tudok írásban összeadni és kivonni, ám még ez a mezei C kissé új nekem. Valami olyat gondoltam ki, hogy indítok egy for-t a 100-as sorhossztól 0-ig, majd ött jegyenként összeadom őket. Ha nagyobb mint 10 akkor letárolom az utolsó jegyet, a maradékot meg továbbviszem.

    Kivonás: -||-

    Nyilvánvalóan a teljesen saját megoldás a célom, csupán egy kis gondolatébresztőt kérnék, hogy miként kezdenétek neki. Ez annyira alap, hogy félek túlkomplikálom.

    Köszi!

    Üdv. core2

    Szia!

    Jó gondolat a karaktertömb és jó a probléma felvetés! Fél siker. :)

    Egy struktúrát használnék pl.:
    typedef struct
    {
    char isMinus;
    unsigned int len;
    char *number;
    } number_s

    A fájlban ASCII-ként van letárolva, így amikor letárolnám a struktúrámba, akkor kivonnám az offsetet és egyszerű számként tárolnám, hogy később a műveletek során már ne kelljen ezzel foglalkozni.

    A műveletek kicsit összetettebbek, de valóban a papíron való számolásra érdemes visszavezetni. Amiből kindulhatsz, hogy összeadásnál a leghosszabb szám hossza vagy plusz egy lesz az összeg hossza. Kivonásnál maximum a leghosszabb szám hossza.

    Amit viszont ne kövess el, hogy konstans értékeket használsz! Ha ismerkedsz még csak a nyelvvel, akkor a prototípus lehet fix számú és akkor a logikát ki lehet próbálni, de utána illik generálissá tenni. Ehhez pedig melegen ajánlom a malloc/free függvényt. A struktúrában sem véletlenül van tömb pointer :P .

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