Hogy tudom megvizsgálni, hogy egy szám egész-e?
Pascallal dolgozom. A folyamat már megvan a fejemben, egyszerűen képtelen vagyok összerakni, mert már fáradt vagyok és szorít a határidő. :(
Úgy gondolom, hogy valamit a trunc(x) függvénnyel kell kezdeni, mellé meg jön majd egy feltétel, de nagyon zokni vagyok most ehhez, egy kis segítséget elviselnék :D
Köszi
Így az egészrésszel, de a traunc is hasonló:
if trunc(szam)=szam
then
writeln("Egesz");
else
writeln("Tört");
Legyen már inkább Frac :)
if Frac(szam) <> 0 then WriteLn('Tört') else...
Minden megoldás jó eddig. (Leszámítva a round-os gyereket)
Azonban ez a leggyorsabb módszer:
return n - (double)(int)n == 0.0;
> Erre van a Frac függvény ami a törtrészt adja vissza.
A Frac() borzasztó lassú. Ha nincs rá valós okod, nem jó használni.
> Pascal-ban kell!
Én kérek elnézést.
function isInteger(n : Double) : Double
begin
return n - Double(Integer(n)) = 0.0;
end;
"Minden megoldás jó eddig. (Leszámítva a round-os gyereket)"
Én úgy látom , hogy egyedül a te megoldásod nem jó. (Amikor kiírtam akkor még nem láttam a legelső válaszát.)
Kicsit átírtam az egyik példát az oldalon amit linkeltem, hogy megmutassam több input számra:
"Én kérek elnézést.
function isInteger(n : Double) : Double
begin
return n - Double(Integer(n)) = 0.0;
end;"
Ha olyan okos gyerek vagy akkor tudhatnád, hogy pascalban nincs return. Továbbá Double értéket vár a függvényed és boolean értéket próbálsz átadni neki, ez nem gyenge típusos mint a C hogy elfogadja, ez erősen típusos nyelv, egyébként is ronda lenne. Továbbá Illegal type conversion-t ír rá a fordító alapból erre "Double(Integer(n))".
"A Frac() borzasztó lassú. Ha nincs rá valós okod, nem jó használni."
Trunc-al, frac-al, round-al is jó, én a round-ot javasoltam.
Kipróbáltam 1 millió trunc, frac és round hívást külön külön. A frac 40 milliszekundum körül futott le (több millisec ingadozás ugye van a multitaszk miatt)
Egy frac hívás a milliomod másodperc törtrészéig tart, ÚrIsten ez mekkora idővesztesség, az igaz, hogy a multitaszk az ennél többet vesz el, meg a képernyőre kiírás az eleve aránytalanul több idő. A trunc az 20 milisec körül volt (1 millió hívásra).
Láttam már itt olyan elmebeteget, aki ragaszkodott foggal körömmel ahhoz, hogy emberfeletti erővel optimalizáljunk, a NASA-t is lehordta mindennek mert nem így tesz, ha egy évig fut egy program akkor sem ha csak lehet egy órajel ciklussal se fusson hosszabb ideig a program, ha akár órákkal tovább tart csak e miatt a program megírása.
Mellesleg elárulom , hogy a round 10 milisec körül teljesített (1 millió meghívásra), egyben leggyorsabb a 3 közül.
if (szam%1==0) then write("egész") else write("tört")
minek ide függvény?
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!