Diskuze: Našiel som zaujímavý kód, ale nechápem ako pracuje
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 15 zpráv z 15.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.
Odhaduje PI podle té vyčárkované plochy
Wow, sice znám vztah mezi PI a obsahem a obvodem, ale z toho kódu bych to
nepoznal
Dá se to přepsat třeba na tenhle tvar:
#include <stdio.h>
#define _ plocha-->0||plocha-r--; // makro, kazde podtrzitko v kodu se nahradi timto kodem
int plocha=0,r=0;
void spocitej()
{
_-_-_-_
_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_-_-_-_-_
_-_-_-_-_-_-_-_
_-_-_-_
}
void main()
{
spocitej();
printf("%f\n",4.0*-plocha/(r*r));
getchar();
}
#define _ plocha-->0||plocha-r--;
Odzávorkované, aby bylo vidět, co k čemu patří:
(plocha--)>0||plocha-(r--);
Ta část za || se (kvůli optimalizacím) provede jen když první část
vyjde false - tedy když obsah proměnné
plocha <= 0 .
Např. první řádek funkce spocitej() se pak rozvine do
plocha-->0||plocha-r--;-plocha-->0||plocha-r--;-plocha-->0||plocha-r--;-plocha-->0||plocha-r--;
To je ale dobrá prasárna Ale vypadá to pěkně s tim kolečkem vevnitř
Mňa by celkom zaujímalo, ktorá hlavička to vymyslela.
PS.
Pokúšal som sa napísať program, ktorý by priebežne vypisoval aktuálne
hodnoty premenných plocha a r (podľa Satik-a), ale nejak sa mi nedarilo.
Stačí když změníš to makro:
#define _ plocha-->0||plocha-r--; printf("%d %d\n",plocha,r);
Super jednoduché. Díky.
Stále zisťujem ako do toho málo vidím.
Ešte by ma zaujímalo, ako napadlo Satik-a zmeniť:
printf("%f\n",4.-F/OO/OO);
na
printf("%f\n",4.0-F/(OO*OO));
jelikož
15/3/5 = 1;
a
15/(3*5) = 1;
když nějaké číslo_X dělíš číslem_a a výsledek pak číslem_b tak to je stejné jako vydělit číslo_X součinem čísla_a a čísla_b
Ďakujem. Predpokladám, že je to jedna zo základných znalostí základnej školy, ale od tej som už vzdialený 40 rokov, tak prepáčte za neznalosť.:[
.... nevím jestli se to
učí na ZŠ ale dá se to odvodit
Je to to samé jako když máš X - A - B = Y .. tak funguje X - (A+B) = Y
Je na čase aby som to uzavrel a odpovedal na moju pôvodnú otázku.
Preložené do matematiky to znamená, že funkcia F_OO() za pomoci makra
#define _ F-->00||F-OO--; vráti hodnoty:
F = -201
OO = -16
Vzorec 4.*-F/OO/OO teda 4 * -(-201) /-16 / -16
= 3,140625
Zobrazeno 15 zpráv z 15.