Builder.cz - Informacni server o programovani

Odběr fotomagazínu

Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!

 

Zadejte Vaši e-mailovou adresu:

Kamarád fotí rád?

Přihlas ho k odběru fotomagazínu!

 

Zadejte e-mailovou adresu kamaráda:



Zaokrouhelní s přesností na desetinná místa

Seznam témat     Nová odpověď

Přihlásit se     Registrace     Zapomenuté heslo

Re: Zaokrouhelní s přesností na desetinná místa

Autor: DM

20:32:11 19.10.2011

Abych nepoužil větvení, tak jsem to udělal takto:

/*Zaokrouhlení*/
int zaokrouhleni()
{
float a;
float b_cele;
float b_desetinne;
float b_rozdil;
float c;
printf("Zadejte cislo: ");
scanf("%f", &a);
printf("Zadejte presnost: ");
scanf("%f", &c);
b_desetinne=a/c;
b_cele=(int)b_desetinne;
b_rozdil=b_desetinne-b_cele;
(b_rozdil<0.5)?b_cele:++b_cele;
b_desetinne=(float)b_cele*c;
printf("Cislo po zaokrouhleni je: %f", b_desetinne);
}

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

20:34:14 15.10.2011

zaokrouhlení provede funkce printf

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

20:33:23 15.10.2011

[code]
while (presnost < 1) { //zjistí na kolik des. míst se zaokrouhluje.
i++;
presnost *= 10;
} //Pokud jsi zadal přesnost 0.001, tak i je 3.

printf("Cislo po zaokrouhleni je: %.*f",i,cislo); //zformátuje cislo na i desetinných míst
[/code]

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

13:01:24 15.10.2011

Moc díky za pomoc. Nějakou šťastnou náhodou se mi to podařilo najít na netu(původně v lehce složitějí formě):

[ital]
#include

int main()
{
int i = 0;
float cislo, presnost;

printf("Zadejte desetine cislo: ");
scanf("%f",&cislo);
printf("Zadejte presnost: ");
scanf("%f",&presnost);
while (presnost < 1) {
i++;
presnost *= 10;
}
printf("Cislo po zaokrouhleni je: %.*f",i,cislo);
return 0;
}
[/ital]

Chtěl bych tomu správně porozumnět co to vlastně dělá.
Takže od začátku:
Vytvoří se proměnná i která se rovná 0,
vytvoří se číslená proměnná číslo a přesnost,
vypíše se text (Zadejte desetine cislo:),
načte se vstupní číselná proměnná přiřadí se jí proměnná cislo,
vypíše se text (Zadejte presnost:),
načte se vstupní číselná proměnná přesnost,
Vytvoří se podmínka když (přesnost bude menší než 1) přičte se do proměnné i 1,
????? presnost *= 10; - tohle mi není přesně jasné?????
Potom už se jen vypíše Číslo po zaokrouhlení pomocí těch dvou proměnných.


Kde tam proběhlo to zaokrouhlení mi není jasný? Může mi to někde polopaticky vysvětlit?
:S

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

9:00:09 14.10.2011

Vydání Učebnice jazyka C od P. Herouta, které mám, je plné chyb :(. Správný postup jsem zjistil způsobem pokus - omyl:
[code]
float cislo = 2.58967;
char text[128];
int presnost = 2;

sprintf(text, "%.*f", presnost, cislo); //* v řídícím řetězci formátu znamená, že se má použít parametr přesnost
[/code]
nebo si řídící řetězec formátu vytvořit předem:
[code]
float cislo = 2.58967;
char text[128];
char ridici[10];
int presnost = 2;

sprintf(ridici, "%%.%df", presnost); //vytvoří řídící řetězec formátu
sprintf(text, ridici, cislo); //provede formátování
[/code]
v obou případech je výsledný text "2.59"
pro printf to bude fungovat stejně.

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

17:17:52 13.10.2011

Snažím se ten pointer pochopit ale moc mi to nejde mám to teď nějak takhle a už vážně netuším kde dělám chybu :S
[ital]#include
#include

int main()
{
float cislo;
printf("Zadejte cislo: ");
scanf("%g",&cislo);
printf("Zadejte presnost: ");
float presnost;
scanf("%f",&presnost);
float pocet_mist = 0.05;
int i=1, *carka;
carka = &i;
if (presnost = 0.01) pocet_mist/10, i++,
printf("Cislo po zaokrouhleni je: %.*f",i, cislo+pocet_mist*presnost);
else if (presnost = 0.001) pocet_mist/100, i++,
printf("Cislo po zaokrouhleni je: %.*f",i, cislo+pocet_mist*presnost);
else if (presnost = 0.0001) pocet_mist/1000, i++,
printf("Cislo po zaokrouhleni je: %.*f",i, cislo+pocet_mist*presnost);
return 0;
}
[/ital]

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

16:47:56 13.10.2011

ta proměnná se dává přes pointer a v řídícím řetězci formátu se uvádí místo parametru *, proto to bylo

printf("%.*f", &presnost, cislo);

jinak tu mocninu jde nahradit takto:
[code]
float mocnina = 1;
for (int i = 1; i<= presnost, i++) {
mocnina = mocnina/10
}
cislo = cislo + 0.5 * mocnina;
[/code]

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

16:33:45 13.10.2011

Tuhle knihovnu už právě využívat nesmím. Chtěl jsem hodit proměnou místo té dvojky (%.2f) -> (%.%ff) nebo (%.promennaf). Ale nějak mi to nechce vzít. Takže to asi nevyřeším. Ta funkce pow se asi nedá ničím nahradit což? Leda to otrocky všechno vypsat :)

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

16:24:41 13.10.2011

funkce pov je v hlavičkovém souboru math.h

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

16:23:33 13.10.2011

Lepší bude zadat přesnost jako počet míst na které se má zaokrouhli, tj. celé číslo.

int presnost;

cislo = cislo + 0.5 * pow(10, (-1 * presnost));
printf("%.*f", &presnost, cislo);

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

15:29:49 13.10.2011

Díky moc, teď už to připomíná to co jsem potřeboval když tam zadám uvedené hodnoty, jen ještě otázečka: počet těch destinných míst pomocí toho %2.f se nedá nějak nadefinovat podle té počtu míst té přesnosti?? ;)

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

15:06:16 13.10.2011

ještě jedna chyba, má to být

cislo + 0.5 * presnost

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

15:01:20 13.10.2011

musíš volit přesnost v řídícím řetězci formátu ve funkci printf podle počtu des. míst. Pro přesnost 0.01 bys měl mít 2 des. místa

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

hu

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

12:26:22 13.10.2011

Tak nějake chyby jsem doladil ale pořád to není ono:
[ital]
#include
#include

int main()
{
float cislo;
printf("Zadejte cislo: ");
scanf("%g",&cislo);
printf("Zadejte presnost: ");
float presnost;
scanf("%f",&presnost);
printf("Cislo po zaokrouhleni je: %f",cislo*presnost);
return 0;
}
[/ital]

Takhle mi to z čísla 2.34568
s přesností 0.0001
udělá číslo 0.0002346 :S

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

12:06:17 13.10.2011

Nevím zda je to správné řešení, ale hází i to jiná čísla. Možná mám chybu v zápisu:
[ital]
#include
#include

int main()
{
float cislo;
printf("Zadejte cislo: ");
scanf("%f",&cislo);
printf("Zadejte presnost: ");
int presnost;
scanf("%f",&presnost);
printf("Cislo po zaokrouhleni je: %f",cislo+0.5*presnost);
return 0;
}
[/ital]

Citovat příspěvek

 

Re: Zaokrouhelní s přesností na desetinná místa

Autor: hlucheucho

11:54:07 13.10.2011

cislo + 5 * presnost

pak zformátovat pomocí printf

hu

Citovat příspěvek

 

Zaokrouhelní s přesností na desetinná místa

Autor: MartinGLX

10:59:33 13.10.2011

Dobrý den, potřeboval bych poradit v souvislosti s programováním v jazyku C.
Musím napsat program, který načte desetinné číslo a požadovanou "přesnost" a vypíše na obrazovku toto číslo zaokrouhlené s danou přesností.

Zadejte cislo: 8.037
Zadejte presnost: 0.01
Cislo po zaokrouhleni je: 8.04

Nevím jak si poradit s tou přesností zaokrouhlení které zadá uživatel. Jak by jste to řešili vy?
Mám povolené jen knihovny: stdio.h, stdlib.h :S

Citovat příspěvek

 

 

 

Přihlášení k mému účtu

Uživatelské jméno:

Heslo: