
C++ jak vypnout výpis v semilogaritmickém tvaru
Ahoj,
začínám programovat a rozhodl jsem se otestovat své dosavadní znalosti a naprogramovat kalkulačku odpisů. Logicky mi vše funguje. Možná mi vytknete, že to mám zbytečně složitě, ale dělám to tak, abych tomu sám rozuměl :D
Teď k mému problému. Když mi program vypisuje větší čísla, tak si vypíšou v semilogaritmickém tvaru. Nevím, jak to obejít. Budu rád za každou radu.
Děkuji.
Už mi to jde. Změnil jsem proměnné z "int" na "long long" a použil header "iomanip". Potom jsem změnil "cout" na "stl::cout << std::fixed << std::setprecision(o) <<..." a vše více méně běží podle mých představ.
Díky za rady. :)
podla mna si urobil uplne kraviny, ale ok :)
(Napr. setprecision volaj len raz predtym).
P.S. a citaj si aj warningy, ono to neni len tak convertovat hore dole formaty, tie warningy to pise aby si na to daval pozor.
nevíš, co bych s tím mohl udělat, aby v těch varováních nebyl takový bordel prosím? Programuju teprve asi týden, tak se prosím nediv, že mám možná tak dementní otázky :)
//přikládám svůj kód...
17160
Napr.
OdpisRok01 = (cena * 20) / 100;
vsetko su integery, takze podla mna ked cena bude napr. 2, tak OdpisRok01 bude cista 0. Si si isty ze to je tak spravne?
takže to znamená, že si mám ty proměnné na začátku programu předefinovat na double nebo float? :)
Ved si ten program otestuj ze co sa stane ked zadas cena = 1, ze kolko bude OdpisRok01
P.S> a celociselne veci ako skupina apod samozrejme ostane ako integer. A mal by si si testovat uzivatelsky vstup, on tam uzivatel moze trebars napisat aj skupinu "bodni sa" :D
(neviem teraz zhlavy co urobi cin ked ma parsovat integer a uzivatel napise string, bud vrati 0 alebo hodi exception, alebo obe veci naraz, je to urcite napisane v referencii k cin, link na nejaku referenciu dal uz wikan vyssie, najdi si tam cin.
Ono jde o to, že by se to mělo vždy každé číslo zaokrouhlovat. Ale asi máš pravdu. Mám tam potom výchylky třeba 1KČ asi v důsledku těch haléřů. Takže když se rozhodnu pro proměnné double nebo float, tak musím upravit výpis na obrazovku a zaohrouhlování. Výpis upravím tak, že použiju printf.
To je to, co jsem zatím jakž takž pobral :)
A napr. ked niekde napises cena * 22.25 tak aj vysledok toho nasobenia bude uz float, ptz cislo 22.25 je float. (a desatinne cislo * integer = desatinne cislo)
Naprogramoval si to proste uplne nahodne ptz si od zaciatku nemal jasno co kde mas ulozene v jakom formate. Preto sa ma najprv studovat, az potom nieco programovat. Aby z toho neliezlo ze mam 500eur a kupil som pracku za 300eura a program napise ze mate este v penazenke 250eura :)
takže pokud to chápu správně... pro největší přesnost, tak mám dělat operace s čisly, které msjí stejný datový typ. A jelikož floor vrací float, tak mám vše předefinovat na float. Potom to bude přesně a správně...
Nevím, jestli to chápu správně
Jediny absolutne presny zapis v IT je celociselny tvar (int, long, apod). Ale musis vediet jak s nimi robit operacie, aby si dosiahol to co potrebujes. Vsetky operacie s nimi su celociselne, desatinne miesta sa po operacii odseknu.
Vsetky desatinne tvary maju v PC nejaku odchylku. float je najmenej presny, double je presnejsi. Ked chces pouzivat double, a nejaka funkcia vracia float, tak bud tu funkciu nepouzijes ale pouzijes funkciu ktora vracia double (funkcie maju aj viac moznych verzii a automaticky sa pouzije ta podla toho jaky parameter si tam dal, ked das double moze sa pouzit double verzia, to si mas najst k prislusnej funkcii v jej referencii, je to vsetko zdokumentovane a studovat to mas ty, ja tu nebudem opisovat 3 strany z referencie. Link na nejaku referenciu kniznicnych fcii viz wikan.)
Alebo druha moznost je ze si vyratas resp. odhadnes ze ci ta chyba floatu v tvojom pripade je nepodstatna a pouzijes float (zavisi od toho jake velke cisla a jake operacie s tym robis, s tym sa proste musis zaoberat ked chces take veci programovat seriozne. Inac je to len plusminus autobus bastel, jak dnes uz asi vsetko lebo vsetko robi nejaky cinan a ind a ini traktoristi)
.. v tvojom pripade ked si tam chces ratat nejake domace pocty alebo maximalne milion Kcs alebo co, tak vpohode staci aj presnost floatu. Odchykla je tusim na 8.platnej cifre ci tak nejak (tiez to je jasne definovane u toho formatu, staci si dat do google slova float presnost a studovat - to je ta cinnost ktora je nutna pred vyvojom serioznych aplikacii).
jasný. Díky moc a promiň, že mám tak stupidní otázky. Ani jsem z toho nechtěl nějaký seriózní program. Spíš jenom něco na trénování a zlepšení se. Každopádně nastuduju :)
Díky moc :)
Uz len doplnim ze keby si tam pouzil na vsetky tie cisla double (s vynimkou tej skupiny ci co to ma byt celociselne 1-6), tak by tam bolo vsetko v double aj tie fcie potom vracaju double a nemal by si asi ziadne warningy.
Ano, to už jsem udělal včera nebo předevčírem :)
Děkuji moc. Hodně jsi mi pomohl :)