Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevkov: 10 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 17.07.08
Prihlásený: 24.01.13
Príspevky: 143
Témy: 37
Príspevok NapísalOffline : 12.10.2011 14:22

Zdravim,
mam usek kodu kde nacitavam cez getchar nejake cele čislo, problem je, ze mi nefunguje porovnanie či nie je to čislo vacsie ako ULONG_MAX.

Kód:
unsigned long int cislo = 0;
while (true)
{
    char c = getchar();

    if (c == '\n' || c == EOF)
        break;

    if (((cislo * 10 + c - '0') + ULONG_MAX) > ULONG_MAX)
    {
            .
            .
            .
    }

    cislo = cislo * 10 + c - '0';
}


tento kod som skusal na zaklade doporučenia na nejakej nemeckej stranke, ono mi to akosi fungovalo včera, ale dnes už tak moc nie :D a nie som si vedomy toho žeby som robil nejake zmeny







_________________
PC: Procesor: INTEL Core i7-860, grafika: MSI R4890 Cyclone OC, 1GB DDR5, doska: Gigabyte GA-P55-UD3R, zdroj: Fortron 700W Everest 700 80+, RAM: 2x2GB Corsair XMS3 DHX
Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 09.04.11
Prihlásený: 11.01.14
Príspevky: 257
Témy: 26
Bydlisko: Kesa
Príspevok NapísalOffline : 12.10.2011 14:37

prečo máš tú nulu v uvodzovkách ?







_________________
NB - HP Pavilion DV7 3190 -- Windows® 7 Home Premium 64-bit -- Intel® Core™ i7-720QM 1,6 GHz az 2,8 Ghz Turbo Boost, 6 MB pamäte cache úrovne 2 -- 4 GB DDR3 -- disk 640 GB SATA 5400 ot/min -- rozlíšenie 1600 x 900 -- NVIDIA® GeForce® GT 230M -- 2 815 MB grafickej pamäte s vyhradenou pamäťou 1 GB DDR3 -- pripojenie 802.11 a/b/g/n
Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 12.10.2011 14:44

Pretože c je char. :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 12.10.2011 17:01

@tomxi, neviem presne, co znamena ta kontrola, ale si si vedomy toho, ze tu:
Kód:
((cislo * 10 + c - '0') + ULONG_MAX)

dochadza k preteceniu? A podalsie ziaden udaj typu unsigned long nemoze byt vacsi ako ULONG_MAX.


Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 17.07.08
Prihlásený: 24.01.13
Príspevky: 143
Témy: 37
Príspevok Napísal autor témyOffline : 12.10.2011 17:06

som si toho vedomy. nepotrebujem aby to fungovalo presne takto. ja len potrebujem zistit ktore z dvoch cisel je vacsie.. ci ULONG_MAX ci cislo







_________________
PC: Procesor: INTEL Core i7-860, grafika: MSI R4890 Cyclone OC, 1GB DDR5, doska: Gigabyte GA-P55-UD3R, zdroj: Fortron 700W Everest 700 80+, RAM: 2x2GB Corsair XMS3 DHX
Offline

Skúsený užívateľ
Skúsený užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 12.10.2011 17:12

tomxi píše:
som si toho vedomy

Zrejme nie, pretoze potom by si vedel, ze cokolvek + ULONG_MAX sa zacne pocitat od nuly a teda automaticky to nemoze byt vacsie ako ULONG_MAX :) Ak chces porovnavat nejake cislo s toutu konstantou, potrebujes vacsi datovy typ - logicky, pretoze pre datovy typ unsigned long je to maximalne cislo. Cize mozes pouzit napr double, staci len pretypovat porovnavanie:
Kód:
if ( ( (double)(cislo * 10 + c - '0') + ULONG_MAX) > ULONG_MAX)


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 12.10.2011 17:21

Ten test tam využíva práve to pretečenie (preto tam je to + ULONG_MAX). Ak tam použije double, tak môže nastať problém s tým, že tam nebude presne celé číslo a môže to robiť zvláštne veci. V oboch prípadoch bude funkčnosť záležať tak trochu na náhode.

Ja osobne by som skôr ULONG_MAX vydelil 10 a z toho vychádzal. :)


Offline

Skúsený užívateľ
Skúsený užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 11.01.09
Prihlásený: 18.04.24
Príspevky: 1385
Témy: 9
Bydlisko: Hrinova
Príspevok NapísalOffline : 12.10.2011 17:27

chrono píše:
Ten test tam využíva práve to pretečenie (preto tam je to + ULONG_MAX)

Ale ak v tejto podmienke:
Kód:
if (((cislo * 10 + c - '0') + ULONG_MAX) > ULONG_MAX)

dosadime miesto prvej zatvorky lubovolne cislo:
Kód:
if ( ( 1 + ULONG_MAX ) > ULONG_MAX )

nikdy v zivote nebude tato podmienka splnena, pokial sa pohybujeme v datovom type unsigned long, kde ja maximalne cislo prave ULONG_MAX.


Offline

Skúsený užívateľ
Skúsený užívateľ
Obrázok užívateľa

Registrovaný: 13.11.07
Prihlásený: 20.08.16
Príspevky: 1702
Témy: 0
Príspevok NapísalOffline : 12.10.2011 17:29

Áno a predpokladám, že tá podmienka s tým pretečením pôvodne vyzerala trochu inak. :)


Offline

Užívateľ
Užívateľ
Zistenie či je čislo vacsie ako ULONG_MAX

Registrovaný: 17.07.08
Prihlásený: 24.01.13
Príspevky: 143
Témy: 37
Príspevok Napísal autor témyOffline : 13.10.2011 23:50

spravil som to s tym cislom vydelenim desiatimi :) vdaka







_________________
PC: Procesor: INTEL Core i7-860, grafika: MSI R4890 Cyclone OC, 1GB DDR5, doska: Gigabyte GA-P55-UD3R, zdroj: Fortron 700W Everest 700 80+, RAM: 2x2GB Corsair XMS3 DHX
Odpovedať na tému [ Príspevkov: 10 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. externy HDD nechce kopirovat subory vacsie ako 6GB

v Pevné disky a radiče

8

1612

22.06.2010 16:39

cuckocuc Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Cislo ako string v CSV

v PHP, ASP

2

635

23.06.2008 11:55

stenley Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Word 2007 / ako vlozim cislo strany?

v Ostatné programy

1

1065

13.12.2008 19:28

dulius Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. AKO MAM ZMENIT CISLO NA WIN XP

v Operačné systémy Microsoft

13

1727

07.09.2005 17:58

Pufo Callo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ako zistit najmensie a najvacsie cislo v C

v Assembler, C, C++, Pascal, Java

4

2655

19.11.2009 15:09

reDo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Stránka na zistenie ako mi pôjdu hry

v Služby a webstránky

2

4351

14.02.2013 13:03

Gravedigger Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. VACSIE TITULKY

v Ostatné programy

15

2094

12.05.2007 16:43

Dzimbo Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vacsie rozlisenie notebooku

v Ostatné programy

4

518

20.07.2008 21:40

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. zistenie IP adresy, alebo ako mam zistit ci je FAKE uzivatel

v Bezpečnosť a firewally

1

3481

22.11.2010 0:58

shiro Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Vacsie sluchatka hraju velmi ticho

v Zvuk

5

1003

21.02.2010 2:15

ac.milan Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Starostlivosť o väčšie množstvo tabletov

v Smartfóny a tablety

16

795

05.02.2014 12:37

kuki_sk Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Ext HDD nechce prijať väčšie súbory

v Pevné disky a radiče

5

301

22.04.2013 16:42

dano1805 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. I/P: DDR1 256mb ramky , aj väčšie množstvo , do PC

v Predám

8

609

10.02.2013 19:18

ramaya Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Tel. číslo

v Krčma

8

1101

20.01.2011 16:00

Daron Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Amstrongove číslo

v Assembler, C, C++, Pascal, Java

9

571

14.02.2017 18:40

GamerSK Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Nebere číslo

v PHP, ASP

10

736

18.04.2008 21:26

Svolo Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra