Hirdetés

Keresés

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

  • axioma
    veterán

    Ezen elven kezdtem el agyalni:

    void float_to_str(float szam){
    int number, mennyi = 0, i = 0, tizedes = 0, oszto_tomb[8];

    if(szam < 10)
    tizedes = 1;
    else if(szam < 100)
    tizedes = 2;
    else if(szam < 1000)
    tizedes = 3;
    else if(szam < 10000)
    tizedes = 4;
    else
    printf("Ez a szám már túl nagy.");

    number = szam * 100000;

    while(number != 0) {
    oszto_tomb[i] = number % 10;
    printf("%i, ", oszto_tomb[i]);
    number = number / 10;
    mennyi = i;
    i++;
    }
    printf("\n");

    for(i = mennyi; i >= 0; i--){
    if(i == (mennyi+1)-tizedes)
    printf("%i.", oszto_tomb[i]);
    printf("%i", oszto_tomb[i]);
    }

    printf("\nHány karakter: %i\n", mennyi+1);

    }
    //kiíratása a main függvényen belül
    float_to_str(12.34567);

    Ez nádjából jól működik amíg 10-nél nem kisebb a lebegőpontos szám amit beadok neki.

    Így néz ki egy kimenet:
    7, 6, 5, 4, 3, 2, 1,
    12.234567
    Hány karakter: 7

    12.234567 (mondjuk valamiért itt 2db 2-es látszik pedig csak 1 van a sorozatban)
    A lényeg látszik belőle, hogy mit is szeretnék.
    Ez hogy lehet hatékonyabban megoldani?

    1. azert van a kettes duplazva, mert elfelejtetted a "nem tizedespont koveti" esetet kulon else agba rakni, igy a tizedes elotti is rafut arra is.
    2. az if feltetel tul bonyolult, mert a tizedes nalad fixen 5 db lesz (me'g ha a vege nullakkal is van feltoltve), hiszen 100e-rel szoroztal (eleg lenne oda egy ilyen:

    for(i = mennyi; i >= 0; i--){
    printf("%i", oszto_tomb[i]);
    if (i==5) { // a 4-3-2-1-0 a tortresz
    printf(".");
    }
    }

    3. szerintem a tizedes nevu valtozoval pont az egeszresz hosszat "szamolod"... nem tul szerencses elnevezes, azt lehetne hinni, hogy a (hasznos) tizedeseket (mert pl. most ha az inputod 2.5, akkor azt fogja kiirni, hogy 2.50000)
    4. a negativ szamokra sehol nem gondolsz, me'g egy arva hibauzenetet se dobsz
    5. nem ertem a mennyi=i; i++; reszt sem: nem lenne egyszerubb, ha a ciklusban nem bantanad a mennyi-t, hanem a kilepes utan irnad, hogy mennyi=i-1 ? Vagy hatultesztelos ciklus (egy szamjegyet ugyis fogsz irni).

  • Karma
    félisten

    Ezen elven kezdtem el agyalni:

    void float_to_str(float szam){
    int number, mennyi = 0, i = 0, tizedes = 0, oszto_tomb[8];

    if(szam < 10)
    tizedes = 1;
    else if(szam < 100)
    tizedes = 2;
    else if(szam < 1000)
    tizedes = 3;
    else if(szam < 10000)
    tizedes = 4;
    else
    printf("Ez a szám már túl nagy.");

    number = szam * 100000;

    while(number != 0) {
    oszto_tomb[i] = number % 10;
    printf("%i, ", oszto_tomb[i]);
    number = number / 10;
    mennyi = i;
    i++;
    }
    printf("\n");

    for(i = mennyi; i >= 0; i--){
    if(i == (mennyi+1)-tizedes)
    printf("%i.", oszto_tomb[i]);
    printf("%i", oszto_tomb[i]);
    }

    printf("\nHány karakter: %i\n", mennyi+1);

    }
    //kiíratása a main függvényen belül
    float_to_str(12.34567);

    Ez nádjából jól működik amíg 10-nél nem kisebb a lebegőpontos szám amit beadok neki.

    Így néz ki egy kimenet:
    7, 6, 5, 4, 3, 2, 1,
    12.234567
    Hány karakter: 7

    12.234567 (mondjuk valamiért itt 2db 2-es látszik pedig csak 1 van a sorozatban)
    A lényeg látszik belőle, hogy mit is szeretnék.
    Ez hogy lehet hatékonyabban megoldani?

    Lebegőpontos számot hány tizedesjegyig szeretnél számolgatni? A definíció szerinti pontatlanságon túl ez is egy fontos szempont.

    Továbbra is fenntartom az állításomat, hogy ez nem egy számítási, hanem egy karakterkezelési feladat. A tizes számrendszer emberi fogyasztásra alkalmas csak egyébként is. Jó szórakozást hozzá, én kiszálltam.

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