DU2
- JJ
- Matfyz(ák|ačka) level II
- Příspěvky: 99
- Registrován: 28. 1. 2005 14:03
- Typ studia: Informatika Mgr.
DU2
No tak jsem se aktivne pustil do druheho ukolu a celkem brzy sem zjistil, ze jsem asi moc nedaval pozor.
Jak mame prevadet yytext na integery(pripadne na floaty)?
To ze atoi to nema byt mi doslo celkem rychle Orezavani bitu chapu, ale pokud mam v char* velke cislo (treba 30 cifer) tak to nemuzu prevest na rozumny int, ktery bych mohl oriznout.
Jak mame prevadet yytext na integery(pripadne na floaty)?
To ze atoi to nema byt mi doslo celkem rychle Orezavani bitu chapu, ale pokud mam v char* velke cislo (treba 30 cifer) tak to nemuzu prevest na rozumny int, ktery bych mohl oriznout.
-
- Admin(ka) level I
- Příspěvky: 635
- Registrován: 9. 6. 2005 12:33
- Typ studia: Informatika Mgr.
- Login do SIS: BUREJ3BM
- Bydliště: Konečně Vinohrady:)
- Kontaktovat uživatele:
Pokud se nepletu, tak možností máš víc - nějak inteligentně si to "převádět po částech", použít ten extralong co se psal někdy loni či předloni na OOPčku jako domácí úkol nebo tak něco (jinak řečeno není problém si udělat třídu "nekončeně velkých čísel"), zpracovávat si to přímo v tom stringu (i to se tuším někdy dělalo na cvíkách) nebo použít aspoň ten jejich "longlong" či jak se to jmenuje - je tam předdefinovaná třída tvořená dvěma longama. Určitě je ještě víc přístupů, tohle je jen takový ranní "brainstorming" abych ti pomohl ubírat se správnou cestou...
When life gives you crap, make crap golems.
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Este k tomu musis dorobit spracovanie tych zle zapisanych cisel (napr. 24j).Dawe píše:Myslím, že stačí otestovat, jestli v tom char* (resp. string) není něco většího než těch 4294967295 (2^32 -1) - (to se provede celkem snadno) a pokud jo, zařvu a pustím na to atoi a vypadne mi to co má ne? Jestli se pletu, tak mě opravte, abych to vymyslel nějak jináč
- rastik
- Supermatfyz(ák|ačka)
- Příspěvky: 661
- Registrován: 19. 10. 2005 21:45
- Typ studia: Informatika Mgr.
- Login do SIS: wartr3am
- Bydliště: Praha
- Kontaktovat uživatele:
Aha, mas pravdu, atoi to oreze zle. Ked som to skusal na zaciatku, tak som mal dojem ze to fungovalo. Ta moja veta s tym orezavani ale plati, vysledok je potom:JJ píše:Podle me by to melo z cisla
4294967296 ( binarne 100000000000000000000000000000000 )
melo udelat 0 (uriznutim vyssich bitu ), ale atoi z toho udela neco jako maxint
Kód: Vybrat vše
Warning (line 10): Integer number '4294967296' is out of range, will be truncated
10: unsigned integer [0]
- Dawe
- Supermatfyz(ák|ačka)
- Příspěvky: 360
- Registrován: 12. 10. 2004 12:32
- Typ studia: Informatika Mgr.
- Bydliště: Doma a nebo na koleji
No nevím, mně když do atoi pošlu "4294967296" tak mi vrátí 0
Ale spíš sem se chtěl zeptat jak je to s tím že se to v tý interpretaci ukládá do vektoru intů ač je to unsigned int, potom z toho vyleze jiný číslo než dotoho vlezlo. Resp. vše co je do 2^31 - 1 je OK a pak to dělá bordel...
Výsledný soubor pak neodpovídá zadanýmu...
Ale spíš sem se chtěl zeptat jak je to s tím že se to v tý interpretaci ukládá do vektoru intů ač je to unsigned int, potom z toho vyleze jiný číslo než dotoho vlezlo. Resp. vše co je do 2^31 - 1 je OK a pak to dělá bordel...
Výsledný soubor pak neodpovídá zadanýmu...
- JJ
- Matfyz(ák|ačka) level II
- Příspěvky: 99
- Registrován: 28. 1. 2005 14:03
- Typ studia: Informatika Mgr.
Mas nejaky chytry atoi me to na win i na linuxu dava 2147483647Dawe píše:No nevím, mně když do atoi pošlu "4294967296" tak mi vrátí 0
No tebe zajimaji cisla jen do 2^31-1. Vetsi uz jsou 32-bitovyDawe píše: Ale spíš sem se chtěl zeptat jak je to s tím že se to v tý interpretaci ukládá do vektoru intů ač je to unsigned int, potom z toho vyleze jiný číslo než dotoho vlezlo. Resp. vše co je do 2^31 - 1 je OK a pak to dělá bordel...
Výsledný soubor pak neodpovídá zadanýmu...
- Dawe
- Supermatfyz(ák|ačka)
- Příspěvky: 360
- Registrován: 12. 10. 2004 12:32
- Typ studia: Informatika Mgr.
- Bydliště: Doma a nebo na koleji
Hmm tak jsem koukal na definici atoi()
V Dev-C++ mi to hezky fungovalo a jak jsem to dal do VS tak to začlo "blbnout". Dev vrací spodní bity, kdežto VS dá jak už tu bylo napsáno "maxint". Takže to chce zvolit jinej přístup ...Return Value.
The converted integer value of the input string.
On overflow the result is undefined.
If an error occurs 0 is returned.