Kezdőoldal » Számítástechnika » Programozás » Hogy kell a legközelebbi...

Hogy kell a legközelebbi ötösre kerekíteni C nyelven?

Figyelt kérdés

Egész számokat kell kerekíteni a legközelebbi öttel osztható számra a következő szabály szerint.

1;2-->alsó tízes

3;4;6;7-->5

8;9-->felső tízes

Néztem interneten ilyeneket, hogy "round", "ceil" meg "floor", de még nem tudtam kibogozni, hogy egyáltalán ezekkel kell-e, és ha igen, akkor hogyan.



2014. máj. 8. 11:13
1 2
 1/17 anonim ***** válasza:
100%
Round a hagyományos kerekítés, a floor a lefelé, a ceil pedig a felfelé kerekítés.
2014. máj. 8. 11:20
Hasznos számodra ez a válasz?
 2/17 anonim ***** válasza:
100%
De persze ezeknek nem sok köze van a te adott feladatodhoz.
2014. máj. 8. 11:21
Hasznos számodra ez a válasz?
 3/17 iostream ***** válasza:
77%
C-ben ha leosztasz egy egész számot egy másik egész számmal, akkor csonkít 0 felé, tehát 1/5 == 0, 9/5 == 1. Ha ezek után visszaszorzod ugyanazzal a számmal, akkor lefelé kerekítettél arra a számra, 1/5*5 == 0, 9/5*5 == 5. Ehhez már csak egy dolgot kell hozzátenni, hogy megoldja a feladatod.
2014. máj. 8. 11:45
Hasznos számodra ez a válasz?
 4/17 anonim ***** válasza:

szerintem szorozd meg 2-vel, kerekíts 10-re, majd oszd vissza 2-vel


(előző megoldás egyébként jobb, de ezt talán könnyebben megérted)

2014. máj. 8. 11:54
Hasznos számodra ez a válasz?
 5/17 anonim ***** válasza:
100%

Adott az input szám. Adj hozzá kettőt, oszd el az inputot 5-el (egész osztás), majd szorozd fel 5-el.


Ennyi az egész.

2014. máj. 8. 13:51
Hasznos számodra ez a válasz?
 6/17 anonim ***** válasza:

Sokféle megoldás van, pl:


int aKerek[] = {0,-1,-2,2,1,0,-1,-2,2,1,0,-1,-2,2,1,0}

unsigned int kerek(unsigned int i) {return i+aKerek[i&15];}

2014. máj. 8. 14:02
Hasznos számodra ez a válasz?
 7/17 iostream ***** válasza:

Utolsó, ez majdnem jó, de szerintem ezt gondold át: aKerek[i&15];

Én lecserélném egy %10-re.


Amúgy nekem ez tetszik a legjobban, viszont ez már inkább a tapasztaltabb programozó hozzáállása, nem a matekos megközelítés.

2014. máj. 8. 14:22
Hasznos számodra ez a válasz?
 8/17 anonim ***** válasza:

"szerintem ezt gondold át: aKerek[i&15];"


Az alsó négy bitet maszkolom ki vele, szóval direkt van így (15=1111b). Ez egy igen gyorsan lefutó művelet. Próbáltam a sebességre figyelni. Sőt, először nem is különbségeket akartam a tömbbe vinni, hanem olyan értékeket, amiket XOR kapcsolatba hozva a számmal, korrigálja az alsó négy bitet. Túlzás? :))


Egyébként nekem az #5-ös megoldás is tetszik. Egyszerű és gyorsan fut. :)

2014. máj. 8. 14:32
Hasznos számodra ez a válasz?
 9/17 A kérdező kommentje:
Köszönöm szépen mindenkinek. :) Mindenki kapott upvote-ot a válaszára.
2014. máj. 8. 15:37
 10/17 iostream ***** válasza:

#8 Oké, akkor most képzeld el, hogy i 16. 16 & 15 == 0. 16 + 0 == 16. Helyes ez az algoritmus szerinted, elvégzi a feladatot? Mi van, ha i negatív?

Miért akarod nekem elmagyarázni, hogy mit csinál és mennyire gyors? Miért nézed hülyének a másikat ahelyett, hogy elgondolkondál az kritikán?


A #5 megoldás meg pont az, amit én és már más is javasolt, csak nem hagy a kérdezőre semmit. Pedig nem ártana, ha magától is gondolkodna kicsit.

2014. máj. 8. 16:10
Hasznos számodra ez a válasz?
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!