Kde ej chyba – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Kde ej chyba – C / C++ – Fórum – Programujte.comKde ej chyba – C / C++ – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Tom@sQo0
Stálý člen
16. 10. 2007   #1
-
0
-

ahoj prave zacinam s kniznicou stdio(koli rychlostnym problemom) a neviem si poradit s tymto:



#include <cstdio>


int main(){
int pole[4];
for(int i=0; i != 3; ++i){
scanf("%d", pole+i);

}
for(int i=0; i != 3; ++i){
printf("%d \n", pole+i);
}


return 0;
}

hodi mi:
tomi@tomi-desktop:~/tomi/develop/cpp/palma$ ./a.out
1 2 3
-1081132772
-1081132768
-1081132764


taktiez ma zaujima, ze ako zaokruhlim napr. cislo 2.18225e+06 cez cout a cez printf naaa napr. 3 desatinne miesta :) diky :)

aaa the last question: ked chcem mat pole pre 3 prvky tam ho mam alokovat ako pole[3], alebo ako pole[4]? tusim posledne je ukoncovaci znak a tam sa neda hodit nic, ale pre istotu sa pytam :)

Nahlásit jako SPAM
IP: ...–
Tom@sQo
Reklama
Reklama
Zelenáč0
Posthunter
16. 10. 2007   #2
-
0
-

Ten ukoncoaci znak je potreba, jen kdyz do pole ukladas retezec...



for(int i=0; i != 3; ++i){
scanf("%d", pole+i);
}

for(int i=0; i != 3; ++i){
printf("%d \n", *(pole+i));
}


Jinak proc proste nepouzijes
scanf("%d", pole[i]);

???

Nahlásit jako SPAM
IP: ...–
Matrix17
~ Anonymní uživatel
286 příspěvků
16. 10. 2007   #3
-
0
-

To Zelenáč:


Jinak proc proste nepouzijes

scanf("%d", pole[i]);

???


To nemůže použít jelikož to nefunguje a je to špatně.


scanf("%d", &pole[i]);

Takhle je to funkční a správně.

To Tom@sQo: Myslíš zaokrouhlení čísla nebo vypsat číslo s přesností na 3 desetinná místa?

Nahlásit jako SPAM
IP: ...–
Tom@sQo0
Stálý člen
17. 10. 2007   #4
-
0
-

matrix: 1) diky ;)
2) myslim zaokruhlenie a aj vypisanie - napis mi oba sposoby pls :)

Nahlásit jako SPAM
IP: ...–
Tom@sQo
Matrix17
~ Anonymní uživatel
286 příspěvků
17. 10. 2007   #5
-
0
-

To Tom@sQo: U printf() je vypisování s určitou přesností jednodušší než u objektu cout.



float max;
printf("%3.2f", max);

Rezervuje 3 místa pro celou část čísla a 2 pro desetinnou.

U objetku cout se to provádí pomocí setprecision(pocet_des_mist):


#include <iomanip>
float max;
setprecision(3);
cout << max<< '\n';


Zaokrouhlování:


#include <math.h> nebo #include <cmath> (c++)
modf(x,n) // rozdělí x na dvě části x - celá část a n - desetinná
ceil(x) // zaokrouhlení nahoru
floor(x) // zaokrouhlení dolů

Nahlásit jako SPAM
IP: ...–
Tom@sQo0
Stálý člen
19. 10. 2007   #6
-
0
-

ahoj,
este posledna otazka:



float max;
printf("%3.2f", max);
// Rezervuje 3 místa pro celou část čísla a 2 pro desetinnou.


a da sa to nejak tak spravit, ze rezervuje 2 miesta pre desatinnu cast a automaticky reverzuje pre hocaky pocet celych cisel?
zide sa mi to napr. vtedy, ked neviem kolko presne ma to cislo cislic :)

matrix17: diky moc, este mi pls ty, alebo niekto iny odpovedzte na tu poslednu otazku napisanu vyssie :)

Nahlásit jako SPAM
IP: ...–
Tom@sQo
Matrix17
~ Anonymní uživatel
286 příspěvků
19. 10. 2007   #7
-
0
-

To Tom@sQo: To že to rezervuje 3 místa znamená že se to k číslu chová jako by tam byly tři číslice i když sou tam třeba jen dvě. A lze taky použít tohle:



printf("%.2f", max);

Což rezervuje 2 místa pro desetinnou část a o celou se nezajímá.

Nahlásit jako SPAM
IP: ...–
tmi0
Věrný člen
26. 10. 2007   #8
-
0
-

zaokrouhlovani se da velice jednoduse napsat:
zaokrouhleni dolu: a = int(a);
nahoru: a = int(a)+1;
zaokrouhleni podle velikosti des. casti (myslim ze se mu rika bankerovo ci tak nejak, proste normalni zaokrouhleni):
a = int(a) + int((a-int(a))*2); //nebo to vyresit pres if, ale toto se mi libi vic
nevim presne jak sou ty knihovni funkce implementovany, takze nemuzu porovnat ktera je rychlesji. ale pokud se chce zaokrouhlovat dolu ci nahoru je rozhodne lepsi neresit funkce a jen tam dat to pretypovani (ale musi se hlidat aby to nepreteklo)

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Matrix17
~ Anonymní uživatel
286 příspěvků
26. 10. 2007   #9
-
0
-

To tmi : Když použiješ přetypování tak tím nedosáhneš zaokrouhlení ale oříznutí desetinné části a přitom riskuješ, že o to číslo který takhle "zaokrouhluješ" příjdeš jelikož reálné datové typy jsou větší než ty celočíselné. Takže já bych to přetypováním rozhodně neřešil ale jestli si myslíš, že to je lepší "zaokrouhlit" přetypováním než funkcí, která je na to určená, tak se s tebou hádat nebudu.

Nahlásit jako SPAM
IP: 85.207.17.–
tmi0
Věrný člen
26. 10. 2007   #10
-
0
-

... ale to vsechno ja vim a v mem prispevku jsem na to bral ohled, stacilo by si ho poradne precist. funkce na zaokrouhlovani ktere jsi ty uvedl taky nic jineho nez uriznuti desetinne casti nedelaji, jde jen o to jestli se potom pricte 1 ci ne, standardni zaokrouhlovani dela funkce round.
ovsem uvedom si taky jednu vec: realne typy jsou sice vetsi, ale funguji trochu jinak: deli se na mantisu a exponent. sice muze pojmout cislo, ktere je teoreticky vyssi nez MAX_LONGLONG(ci jak se to makro jmenuje), ale uz nebudou tolik presna, protoze zobrazuji pouze prvnich k cislic (v zavislosti na velikosti, ktera se muze lisit dle systemu/architektury), a u (k+1)ciferneho cisla by uz jeho hodnotu v radu desitek ignorovaly. takze zaokrouhlovanim by sis stejne nepomohl. realna cisla se proste na pocitacich reprezentuji dost blbe.
uznavam argument ze kdyz na to funkce je napsana, tak pravdepodobne bude dobra, jinak by nekdo napsal lepsi- v C existuje MNOHO lepsich programatoru nez ja. jde o to jestli vzdy potrebujes zaokrouhlovat tak jak to ty funkce delaji. navic nevim jestli jsou inline nebo ne: v mnoha pripadech by se to urcite hodilo. ale pretypovani samo o sobe je pokud se nemylim docela dobra operace: tady plati stejny argument. jeste by se dalo spekulovat o napsani te funkce v assembleru) - ale myslim ze u zaokrouhlovani by se to tak neprojevilo, funkce urcite behaji rychle, stejne jako vyrazy ktere jsem pouzil v minulem prispevku.

Nahlásit jako SPAM
IP: 89.185.230.–
ksp.mff.cuni.cz -- doporučuje 5 z 0 přetečených bufferů!
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 39 hostů

Podobná vlákna

Kde ej chyba? — založil Tom@sQo

C# kde je chyba ? — založil Milan

Kde je chyba?? — založil Af_k

Kde je chyba ? — založil sipeer

Kde je chyba??? — založil Mau

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý