Dobrý deň.
Žiadam o radu (prípadne aj vyriešenie celej úlohy za peniaze) s nasledujúcou úlohou:
Keďže sme z assembleru toho veľa neprebrali, neviem sa nijak odraziť.
Ďakujem
Dobrý deň.
Žiadam o radu (prípadne aj vyriešenie celej úlohy za peniaze) s nasledujúcou úlohou:
Keďže sme z assembleru toho veľa neprebrali, neviem sa nijak odraziť.
Ďakujem
Hodnota a není uvedena, tak ji asi musíš dopočítat. Tj. zjistíš maxima pro střed kruhu + poloměr.
Náhodné číslo 0..1 vynásobíš hodnotou a a dostaneš náhodné číslo 0..a.
To použiješ na vygenerování souřadnic 10-tisíc bodů.
Pro každý bod a všechny tři kruhy otestuješ jestli je bod uvnitř kruhu. Tj. porovnáš vzdálenost bodu od středu kruhu (Pythagorova věta) s poloměrem kruhu.
Pokud hodnoty "je uvnitř" a "má být uvnitř" souhlasí, tak máš zásah.
Nakonec z počtu trefil/netrefil spočítáš tu plochu.
Instrukční sada x87 je třeba tady - x87 floating-point instructions.
To by mělo na odraz stačit. Na konkrétnější dotaz dostaneš konkrétnější odpověd.
#2 gna
Veľmi pekne ďakujem za objasnenie, teraz je to jasnejšie ! :)
Nerozumiem akurát, že čo znamená "zjistíš maxima pro střed kruhu", čo znamená "maximum" stredu kruhu, a ak osa k nemu dopracujem ?
EDIT:
Okey, asi som tejto časti pochopil. Spravím si (x0+y0)+ r0 , (x1+y1)+ r1, (x2+y2)+ r2 a vyberiem si najväčšiu hodnotu ?
Ďakujem
#4 gna
Bohužiaľ, v assemblery nemôžem používať max funkciu (zatiaľ sme takú neprebrali, teda je nepovolená)
Napadlo ma, že by sa to mohlo dať spraviť takýmito podmienkami:
(x – x0)^2 + (y – y0)^2 <= r0^2 and (x – x1)^2 + (y – y1)^2 <= r1^2 and (x – x3)^2 + (y – y3)^2 >= r3^2
Problém je, že ja viem jumpovať len s jednou podmienkou, nie s tolkými.
Je môj výpočet správny, existuje spôsob nejakého "jednoduchého" zápisu podmienkok?
Ďakujem
Já jsem nemyslel konkrétně volání funkce max, ale jen princip.
AND můžeš udělat zřetězením jednotlivých podmínek. V pseudokódu třeba nějak takhle:
if not podminka1
goto fail
if not podminka2
goto fail
if not podminka3
goto fail
good:
// tady jsou vsechny 3 podminky splneny
fail:
// ...
přiznám se že mě docela zaráží jak komplikovaný domácí úkoly na některých školách dávaj .. to je 2-3 ročník vš ?? nebo sš ? nebo zš ? ... a ty si nějak zlobil že si dostal takovouhle strašnou úlohu ? a napadlo tě stěžovat si na nepřiměřenou složitost zadání ? :) :) :) jak dlouho na to máš ? pul roku ? rok ? dva roky ? přiznávám že už nevim jak bych to dělal .. jde o to že asm už po mě nikdo nechtěl asi tak 15 let
#7 JerryM
Dobrý deň. Práve, že assembler máme iba 3 týždne. Nechcem tu teraz nejak verejne vyplakávať, ale učiteľ má pocit, že keď je dištančná výučba, tak vlastne nič nerobíme (mám ďalších iných 9 predmetov) a teda, že nemám celé dni doma nič iné robiť, len písať assembler. Problém je, že všetky úlohy boli doteraz rovnako ťažké a obávam sa, že pokiaľ túto nesplním, tak nebudem pripustený ku skúške. Jedná sa o 1. ročník vysokej školy. V skutočnosti na tú úlohu mám už len asi 2 dni.
jde o to jestli vubec to zadání má smysl protože ... pochop že když budeš generovat jen jedno číslo "a" tak dostaneš jen souřadnice na úhlopříčce chápeš ? ... ale nepotřebuješ náhodou X a Y souřadnici ? já už si to tak nějak nepamatuju ale nějakej pokus v tomhle smyslu sme dělali a ten hod jehlou do čtverce a výpočet pravděpodobnosti požadoval X a Y souřadnici na test jestli se trefim do kruhu co je umístěný někde ve čtverci... chápeš jo ? pokud by si vygeneroval 10000 náhodných bodů ve čtverci tak asi budou, dejme tomu (Normální rozdělení, rovnoměrné rozdělení, Studentovo atd.) rovnoměrně pokrývat celý čtverec. chápeš jo ? ale ty generuješ jen "a" a to je tedy souřadnice na úhlopříčce ??? Měl by ses pana učitele zeptat jak to myslel .. nestduješ náhodou na TUL FM ?
No, ono sa to myslí tak, že tebe "stačí vedieť", že ten útvar sa napr nachádza v dvoch kružniciach z troch, začneš generovať náhodné "hody ihlou". V zásade treba zistiť "len" stranu A (nemyslím si, že sa jedná o uhlopriečku), pretože vzorec na výpočet útvaru poskytnutý v zadaní je. Študujem na slovensku (FMFI UK)
já bych to asi dělal podle tohohle algoritmu a stačí to jenom přepsat do assembleru:
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
a = 0
z = 0
n = 10000
For i = 1 to n
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
vygeneruj náhodné číslo R1
vygeneruj náhodné číslo R2
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RB1 = true
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RB2 = true
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r2
RB3 = false
if RB1 == true AND RB2 == true AND RB3 == false // pak jsem se nástřelem trefil do zelené plochy
a = a + 1
else
z = z + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
#11 JerryM
Ďakujem, vyzerá to zaujímavo.. Akurát som nepostrehol to najdôležitejšie a to, ak osa dostať k tomu Ačku (boli tu nejaké návrhy vyššie, to áno, ale ak by sa dalo niečo konkrétnejšie).. Každopádne to vyzerá ak oslušný odrazový mostík.. Naozaj si to vážim.
pardon :) vloudila se drobná chybička ... tady je opravená verze:
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RB1 = false
RB2 = false
RB3 = false
RI1 = 00000000b // bninarni cislo - short integer 0 .. 255
X = 0
Y = 0
a = 0
z = 0
n = 10000
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y0 = podle zadani
for i = 1 to n
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
vygeneruj náhodné číslo R1
vygeneruj náhodné číslo R2
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RB1 = true
else
RB1 = false
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RB2 = true
else
RB2 = false
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r2
RB3 = false
else
RB3 = true
endif
// posouzeni zda zvetsit "a" nebo "z"
// neboli podminka: if RB1 == true AND RB2 == true AND RB3 == false
// pokud plati tato slozena podminka pak jsem se nástřelem trefil do zelené plochy
RI1 = 00000000b
if RB1 == true
RI1 = RI1 OR 00000001b
endif
if RB2 == true
RI1 = RI1 OR 00000010b
endif
if RB3 == false
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
a = a + 1
else
z = z + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
hm teď mě napadá :) :) :), že takhle by to asi bylo jednodušší:
n = 10000
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y0 = podle zadani
for i = 1 to n
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
vygeneruj náhodné číslo R1
vygeneruj náhodné číslo R2
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
a = a + 1
else
z = z + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
jo jo takhle to asi bude nejlepší :)
a sakra vypadla mě tak inicializace hodnot ... neni nahodou dneska pátek 13-ho ? tak ještě jednou :)
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // bninarni cislo - short integer 0 .. 255
X = 0
Y = 0
a = 0
z = 0
n = 10000
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y0 = podle zadani
for i = 1 to n
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
vygeneruj náhodné číslo R1
vygeneruj náhodné číslo R2
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
a = a + 1
else
z = z + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
mnohem lepší :)
jo tak tohle už bude ok:
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // binarni cislo - short integer 0 .. 255
X = 0
Y = 0
a = 0
z = 0
n = 10000
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y0 = podle zadani
for i = 1 to n
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
vygeneruj náhodné číslo R1
vygeneruj náhodné číslo R2
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
a = a + 1
else
z = z + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // binarni cislo - short integer 0 .. 255
X = 0
Y = 0
nastrely = 10000
z = 0
n = 0
a = podle zadani // velikost strany ctverce
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y2 = podle zadani
for i = 1 to nastrely
RB1 = false
RB2 = false
RB3 = false
X = 0
Y = 0
// vygeneruju dve ruzna nahodna cisla
R1 = nahodne cislo - rdrand
R2 = nahodne cislo - rdrand
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// maska pro porovnani
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
z = z + 1
else
n = n + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
hm tak tohle už by mohla bejt finalní verze:
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // binarni cislo - short integer 0 .. 255
X = 0
Y = 0
nastrely = 10000
z = 0
n = 0
a = podle zadani // velikost strany ctverce
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y2 = podle zadani
for i = 1 to nastrely
X = 0
Y = 0
// vygeneruju dve ruzna nahodna cisla
R1 = nahodne cislo - rdrand
R2 = nahodne cislo - rdrand
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// maska pro porovnani
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
z = z + 1
else
n = n + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // binarni cislo - short integer 0 .. 255
X = 0
Y = 0
nastrely = 10000
z = 0
n = 0
a = podle zadani // velikost strany ctverce
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y2 = podle zadani
for i = 1 to nastrely
X = 0
Y = 0
// vygeneruju dve ruzna nahodna cisla
R1 = nahodne cislo // funkce rdrand
R2 = nahodne cislo // funkce rdrand
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// maska pro porovnani
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)^2
R2 = (Y - y0)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)^2
R2 = (Y - y1)^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "a" nebo "z" ?
if RI1 == 00000111b
z = z + 1
else
n = n + 1
endif
next i
R1 = n + z
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
a ještě chybka v komentařích, takže:
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // binarni cislo - short integer 0 .. 255
X = 0
Y = 0
nastrely = 10000
z = 0
n = 0
a = podle zadani // velikost strany ctverce
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y2 = podle zadani
for i = 1 to nastrely
X = 0
Y = 0
// vygeneruju dve ruzna nahodna cisla
R1 = nahodne cislo // funkce rdrand
R2 = nahodne cislo // funkce rdrand
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// maska pro porovnani
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)
R1 = R1^2
R2 = (Y - y0)^2
R2 = R2^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)
R1 = R1^2
R2 = (Y - y1)
R2 = R2^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)
R1 = R1^2
R2 = (Y - y1)
R2 = R2^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "z" nebo "n" ?
if RI1 == 00000111b
z = z + 1
else
n = n + 1
endif
next i
R1 = z + n
R2 = z / R1
R3 = a * R2
R4 = a * R3
P = R4
v tý první verzi sou chyby ... překlep sem se a místo "n" sem napsal "a" ... a navíc hodnota "a" se tam někde musí zadat jako vstupní hodnota .. hodnota 00000000b je samozřejmě binárně .. 0x00 by to bylo hexadecimálně a 000000L by to bylo oktalově :) bomba ne ?
no a to RI1 je jednoduchý způsob jak zjistit zda platí všechny 3 podmínky .. pokud platí první podmínka nastavíš první bit na 1, pokud druhá nastavíš druhý bit na 1 a pokud třetí nastavíš třetí bit na 1 ... dobře se to převádí do assembleru .. pokud tedy platí všechny tři podmínky tak výsledná hodnota RI1 musí být 00000111b binárně
eště mě napadla jedna verze :)
R1 = 0
R2 = 0
R3 = 0
R4 = 0
RI1 = 00000000b // binarni cislo - short integer 0 .. 255
X = 0
Y = 0
nastrely = 10000
zasah = 0
netrefil = 0
a = podle zadani // velikost strany ctverce
r0 = podle zadani
r1 = podle zadani
r2 = podle zadani
x0 = podle zadani
y0 = podle zadani
x1 = podle zadani
y1 = podle zadani
x2 = podle zadani
y2 = podle zadani
for i = 1 to nastrely
X = 0
Y = 0
// vygeneruju dve ruzna nahodna cisla
R1 = nahodne cislo // funkce rdrand
R2 = nahodne cislo // funkce rdrand
// tady mám jeden z 10000 nástřelů což je bod P(X,Y) a leží ve čtverci a x a
X = R1 * a
Y = R2 * a
// maska pro porovnani
RI1 = 00000000b
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k1 (červený), jestli ano RB1 = true
R1 = (X - x0)
R1 = R1^2
R2 = (Y - y0)
R2 = R2^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r0
RI1 = RI1 OR 00000001b
endif
// Zjisti jestli bod P(X,Y) leží uvnitř kruhu k2 (modrý), jestli ano RB2 = true
R1 = (X - x1)
R1 = R1^2
R2 = (Y - y1)
R2 = R2^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 <= r1
RI1 = RI1 OR 00000010b
endif
// Zjisti jestli bod P(X,Y) leží vně kruhu k3 (černý), jestli ano RB3 = false
R1 = (X - x2)
R1 = R1^2
R2 = (Y - y1)
R2 = R2^2
R3 = R1 + R2
R3 = odmocnina(R3)
if R3 > r2
RI1 = RI1 OR 00000100b
endif
// budeme inkrementovat "zasah" nebo "netrefil" ?
if RI1 == 00000111b
zasah = zasah + 1
else
netrefil = netrefil + 1
endif
next i
R1 = zasah + netrefil
R2 = zasah / R1
R3 = a * R2
R4 = a * R3
P = R4
#7 JerryM
Nhu cầu về thì thị trường thiết kế ngày càng cao thì tấm nhựa PVC ngoài trời được ngày càng ưu chuộng được sự dụng phổ biến trong trang trí ngoại thất với nhiều phong cách khác nhau, thẩm mỹ hơn, hiện đại hơn. Đáp ứng nhu cầu khách hàng, nội thất Cường Vinh luôn tự hào đơn vị cung cấp vật liệu tấm nhựa PVC với sản phẩm đa dạng theo xu hướng thị trường với giá cả hợp lý nhất cho khách hàng. Cùng tìm hiểu rõ hơn dưới bài viết sau đây
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku