Portál AbcLinuxu, 12. května 2025 07:55

Dotaz: uloha v C++

28.11.2012 19:51 marek33
uloha v C++
Přečteno: 368×
Odpovědět | Admin
Zkoušel jsem jeden program: Vypočítejte matematicky přesně tuto hodnotu

1+1/1 1+1/1 1+1/1....a takhle pořaá dokola až do 100

chtěl jsem použít funkci for ale nějak se mi nedařilo...

Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

28.11.2012 20:05 Ariczek | skóre: 5
Rozbalit Rozbalit vše Re: uloha v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
nechápu zadání, zkus ho aspoň správně napsat - chybí tam nějaké znaky ? Tak jak si to napsal mi z toho vychází: 2 2 2 ... to asi nebude to co myslíš
chtěl jsem použít funkci for ale nějak se mi nedařilo...
Ano ? A k čemu jsi došel, kde jsi se zasekl, s čím máš problém ?
28.11.2012 20:13 l4m4
Rozbalit Rozbalit vše Re: uloha v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Cože?

For tedy taky není funkce, to jsme si snad vyjasnili už u toho ifu.

‚1+1/1 1+1/1 1+1/1‘ by teoreticky mohl být zmršeně naformátovaný zápis řetězového zlomku, ale v tom případě bych v dotazu čekal ono klíčové slovo řetězový zlomek.

Pokud to skutečně je řetěžový zlomek, tak matematicky přesně je výsledek nekonečného zlomku (√5 - 1)/2 a zlomek oříznutý na 100 kroků už se této hodnotě rovná s přesností všech běžně používaných číselných typů (na přesnost double se dostaneš po asi 37, a 100 kroků s reservou stačí i na quad precision). Tudíž jsou dvě možnosti:

(a) Výsledek má být representován běžným číselným typem (float, double a pod.): potom stačí vypočíst (sqrt(5)-1)/2.

(b) Je zapotřebí opravdu přesně vypočítat výsledný zlomek, tedy ten čitatel a jmenovatel jako dvě dlouhatanánská celá čísla. Ty se nevejdou do běžných číselných typů, je tedy nutné použít nějaký bigint typ, int v Pythonu (tam je to zadarmo) nebo třeba GMP.

Který z těch dvou případů odpovídá zadanému ‚matematicky přesně‘?
28.11.2012 20:17 l4m4
Rozbalit Rozbalit vše Re: uloha v C++
GMP má vlastně pěkné bindings pro C++, tudíž lze zapisovat matematické oprace s obřími čísly ‚přirozeně‘, ne voláním funkcí jako v C.
28.11.2012 21:52 l4m4
Rozbalit Rozbalit vše Re: uloha v C++
Nicméně jako obvykle dodávám řešení. Obsahuje for, jak je požadováno, počítá to matematicky správně (s výsledkem podle (a) i (b)), a nedodávám vysvětlení, jak to funguje. Pokud na tvé škole netestují, zda věci rozumíš, tak si rovnou udělej raději MBA...
#include <stdio.h>
#include <gmp.h>

int
main(void)
{
    mpq_t result, one;
    mpq_init(result);
    mpq_init(one);
    mpq_set_ui(result, 0, 1);
    mpq_set_ui(one, 1, 1);
    for (unsigned int i = 0; i < 100; i++) {
        mpq_add(result, result, one);
        mpq_inv(result, result);
    }
    mpq_out_str(stdout, 10, result);
    printf("%.16g\n", mpq_get_d(result));
    mpq_clear(one);
    mpq_clear(result);
    return 0;
}
Jendа avatar 28.11.2012 20:24 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: uloha v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
Co formulovat zadání trochu přesněji?
Řešení 1× (Vojtěch Horký)
28.11.2012 20:49 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: uloha v C++
Odpovědět | | Sbalit | Link | Blokovat | Admin
FAQ.

A for nie je funkcia, ale kľúčové slovo, ktorým sa zapisuje cyklus.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.