Assembler x86 Intel Pentium – Assembler – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Assembler x86 Intel Pentium – Assembler – Fórum – Programujte.comAssembler x86 Intel Pentium – Assembler – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené — příspěvek s řešením.
11. 5. 2021   #1
-
0
-

Dobrý deň.

Žiadam o radu (prípadne aj vyriešenie celej úlohy za peniaze) s nasledujúcou úlohou:

Připojen obrázek.

Keďže sme z assembleru toho veľa neprebrali, neviem sa nijak odraziť.

Ďakujem

Nahlásit jako SPAM
IP: 194.154.246.–
gna
~ Anonymní uživatel
1891 příspěvků
11. 5. 2021   #2
-
+1
-
Zajímavé

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.

Nahlásit jako SPAM
IP: 213.211.51.–
12. 5. 2021   #3
-
0
-

#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

Nahlásit jako SPAM
IP: 194.154.246.–
gna
~ Anonymní uživatel
1891 příspěvků
12. 5. 2021   #4
-
0
-

#3 Student53
Asi tak nějak, já bych to popsal takhle: 

a0 = max(x0 + r0, y0 + r0)
a1 = max(x1 + r1, y1 + r1)
a2 = max(x2 + r2, y2 + r2)

a = max(a0, a1, a2)
Nahlásit jako SPAM
IP: 213.211.51.–
12. 5. 2021   #5
-
0
-

#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

Nahlásit jako SPAM
IP: 194.154.246.–
gna
~ Anonymní uživatel
1891 příspěvků
12. 5. 2021   #6
-
0
-

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:
        // ...
Nahlásit jako SPAM
IP: 213.211.51.–
JerryM0
Věrný člen
13. 5. 2021   #7
-
0
-

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 

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
13. 5. 2021   #8
-
0
-

#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.

Nahlásit jako SPAM
IP: 194.154.246.–
JerryM0
Věrný člen
13. 5. 2021   #9
-
0
-

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 ?

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
13. 5. 2021   #10
-
0
-

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)

Nahlásit jako SPAM
IP: 194.154.246.–
JerryM0
Věrný člen
13. 5. 2021   #11
-
+1
-
Zajímavé

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
Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
13. 5. 2021   #12
-
0
-

#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.

Nahlásit jako SPAM
IP: 194.154.246.–
JerryM0
Věrný člen
13. 5. 2021   #13
-
0
-

generování náhodného čísla máš napsáno přímo v zadání, funkce rdrand opravdu existuje

https://www.cryptopp.com/wiki/RDRAND_and_RDSEED

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #14
-
0
-

https://github.com/weidai11/cryptopp/blob/master/rdrand.asm

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
13. 5. 2021   #15
-
0
-

Okey, ďakujem, už mi to začína byť jasné, trochu som prehliadol, že je to celé v cykle (všmol som si len a = 0). Dneska si za to sadnem a spácham to v assembleri. Veľmi pekne Vám ďakujem :)

Nahlásit jako SPAM
IP: 194.154.246.–
JerryM0
Věrný člen
13. 5. 2021   #16
-
0
-

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
Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #17
-
0
-

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ší :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #18
-
0
-

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ší :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #19
-
0
-

a sakra mám tam překlep ve slově "binárního" 

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #20
-
0
-

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





Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #21
-
0
-

jo jo bude pátek 13ho :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #22
-
0
-

tak ještě jednou finální verzi:

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #23
-
0
-

   


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
Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #24
-
0
-

tak ještě ne

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #25
-
0
-

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


Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #26
-
0
-

jo to vypada dobře ... tak napodesaty ... :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #27
-
0
-

ještě drobna kosmeticka uprava:

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #28
-
0
-

   

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




Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #29
-
0
-

jo takhle je to mnohem lepší ...

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #30
-
0
-

to byla ale fuška ...

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #31
-
0
-

už bych asi nemoch chodit do školy :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #32
-
+1
-
Zajímavé

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
Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
JerryM0
Věrný člen
13. 5. 2021   #33
-
+1
-
Zajímavé

hm to by jeden nevěřil kolik se dá v takový prkotině udělat chyb.. asi proto to dostávaj studenti za domácí úkol :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
13. 5. 2021   #34
-
0
-

Vďaka za snahu.

Úplne prvá verzia mi príde logická, ale to RI a 00000001b a porovnavania.. Tomu nerozumiem, načo je to dobré ? Ďakujem

Nahlásit jako SPAM
IP: 194.154.246.–
JerryM0
Věrný člen
13. 5. 2021   #35
-
+1
-
Zajímavé

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ě

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:a438:79bf:7c9:b499...–
Řešení
JerryM0
Věrný člen
14. 5. 2021   #36
-
+1
-
Zajímavé
Vyřešeno Nejlepší odpověď

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
Nahlásit jako SPAM
IP: 109.81.214.–
JerryM0
Věrný člen
15. 5. 2021   #37
-
0
-

už sem jako Microsoft ten taky dává Updaty každých 24 hodin :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:19aa:11f4:e7c4:4c5a...–
16. 5. 2021   #38
-
0
-

#37 JerryM
k Microsoftu bych se nepřirovnával, oni ty aktualizace spíš prasí.

hu

Nahlásit jako SPAM
IP: 2001:af0:ffe4:85f4:88a7:f167:f566:7af1...–
gna
~ Anonymní uživatel
1891 příspěvků
16. 5. 2021   #39
-
0
-

#38 hlucheucho
A Jerry prasí vždycky.

Nahlásit jako SPAM
IP: 213.211.51.–
Kit+15
Guru
16. 5. 2021   #40
-
0
-

#39 gna
Nechme ho. Aspoň se snaží.

Nahlásit jako SPAM
IP: 37.188.193.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JerryM0
Věrný člen
16. 5. 2021   #41
-
0
-

jsem snaživý typ ...

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:d886:34ec:681:1856...–
17. 5. 2021   #42
-
0
-

Tak Vám teda ďakujem za spoluprácu. Nakoniec som úlohu ani nemusel odovzdávať (naškrabal som dostatok bodíkov počas semestra). 

Tak či onak, si naozaj vážim každej vašej sekundy minutej na tejto úlohe.

Nahlásit jako SPAM
IP: 194.154.246.–
JerryM0
Věrný člen
18. 5. 2021   #43
-
0
-

ano ano já hrozně rád dělám zbytečou práci již narození .. .děsně mě to baví pracovat zadarmo ... :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:4ce0:298e:96d8:e5b9...–
Kit+15
Guru
18. 5. 2021   #44
-
0
-

#43 JerryM
Práce zadarmo rozhodně nemusí být zbytečná. Získáváš při ní zkušenosti i jméno.

Nahlásit jako SPAM
IP: 84.244.96.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JerryM0
Věrný člen
18. 5. 2021   #45
-
0
-

ano ano ... jako bezdomovec si za dobré jméno budu chodit kupovat chleba a slanou vodu :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:4ce0:298e:96d8:e5b9...–
Kit+15
Guru
18. 5. 2021   #46
-
+1
-
Zajímavé

#45 JerryM
Dobré jméno ti přivede platící zákazníky.

Nahlásit jako SPAM
IP: 81.19.2.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JerryM0
Věrný člen
18. 5. 2021   #47
-
+1
-
Zajímavé

aha tak takhle se to dělá .. sakra .. tak já sem to až doteď dělal blbě :) :) :) :) :)

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:4ce0:298e:96d8:e5b9...–
18. 5. 2021   #48
-
-1
-
Mimo téma

Kdzž si bude hrát na charitu, tak spíš neplatící zákazníky.

hu

Nahlásit jako SPAM
IP: 195.178.67.–
Kit+15
Guru
18. 5. 2021   #49
-
-1
-
Mimo téma

#48 hlucheucho
Pravidla jsou jednoduchá: Veřejně radím zdarma, soukromě za peníze.

Nahlásit jako SPAM
IP: 84.244.96.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
JerryM0
Věrný člen
18. 5. 2021   #50
-
+1
-
Zajímavé

wooooooooou a dá se takhle provozovat i sex ?

Nahlásit jako SPAM
IP: 2a00:1028:83be:235a:4ce0:298e:96d8:e5b9...–
11. 7. 2021   #51
-
0
-

#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

Nahlásit jako SPAM
IP: 2001:ee0:4e34:6720:8406:4577:da7b:d2a4...–
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, 119 hostů

Podobná vlákna

Notebook pentium 75 - navrh — založil Johanka z Jarku

Intel ISPC a C++ — založil lacika_dnb

CPU Intel Core2Duo — založil remmidemmi

 

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