Nevíte-li si rady s jakýmkoliv matematickým problémem, toto místo je pro vás jako dělané.
Nástěnka
❗22. 8. 2021 (L) Přecházíme zpět na doménu forum.matweb.cz!
❗04.11.2016 (Jel.) Čtete, prosím, před vložení dotazu, děkuji!
❗23.10.2013 (Jel.) Zkuste před zadáním dotazu použít některý z online-nástrojů, konzultovat použití můžete v sekci CAS.
Nejste přihlášen(a). Přihlásit
Stránky: 1
Ahoj, potřeboval bych poradit se trojrozměrným polem. zadání zní: napište program který vygeneruje 1000 trojic čísel - souřadnic (x,y,z) náhodných bodu které leží v krychli se středem v bodě (0,0,0) s hranou o velikosti 10. Po té program zjistí, kolik z těchto bodu leží uvnitř koule se středem v bodě (0,0,0) s poloměrem 5.
udělal jsem program pro dvojrozměrné pole který najde jestli bod patří nebo nepatří do čtverce o straně 10.
pole jsem si vygeneroval takto:
const
max=1000;
for x:=1 to max do
begin for y:=1 to 2 do
A[x,y]:=random(20)-10;
end;
Je to takhle korektně vygenerované abych v něm mohl hledat souřadnice X a Y?
mohli byste mi poradit jak bych si měl vygenerovat trojrozměrné pole abych v něm mohl hledat X Y Z ? díky
Offline
↑ Dopikasan:
To není dobře.
Nejdříve cyklus pro 1000 bodů - souřadnice budou čísla v intervalu <-5;5> (s přesností na setiny)
const max=1000;
var i,p: Integer;
A array[1..max] of array [1..3] of Extended;
begin
WriteLn(' --------------- Koule -------------');
WriteLn;
Randomize; //zapnutí generátoru náhodných čísel
for i := 1 to max do
begin
A[i,1] := Random(1001)/100-5; //x-ová souřadnice bodu
A[i,2] := Random(1001)/100-5; //y-ová souřadnice bodu
A[i,3] := Random(1001)/100-5; //z-ová souřadnice bodu
end;
//Potom zjistíme zda bod leží v kouli S(0,0,0) a poloměru 5.
p := 0;
for i := 1 to max do
if sqrt(A[i,1]*A[i,1]+A[i,2]*A[i,2]+A[i,3]*A[i,3])<5 then
p := p+1; // když leží přičteme ho do počtu
//a vypíšeme počet
WriteLn('Pocet bodu lezicich uvnitr koule je ',p);
//Počkáme až se stiskne Enter
RedLn;
end.
Samozřejmě by to zjišťování počtu šlo dát i do toho prvního cyklu.
Mělo by ti vycházet číslo kolem 520. (pravděpodobnost toho, že bod bude uvnitř koule i na jejím povrch je totiž )
Po editaci:
Podívej se pro zajímavost Sem jak se dá počítat Ludolfovo číslo (a ještě si přitom zasportovat)
Offline
↑ Honzc:
aha, díky :) já měl tendenci udělat nějaké trojrozměrné pole.
a mám jen pár dotazů. proč máš daný random takhle Random(1001)/100-5 a ne třeba Random(20)-10. nebo jaká je výhoda tohohle zápisu?
Offline
↑ Dopikasan:
"..proč máš daný random takhle Random(1001)/100-5 a ne třeba Random(20)-10..."
To proto, že máš krychli, která má střed v (0,0,0) a délku hrany 10, tedy souřadnice bodů uvnitř a na povrchu krychle budou každá v intervalu <-5,5>
Funkce Random(X) generuje náhodná celá čísla v intervalu <0,X), to znamená celé číslo X nedostaneš.
Nyní se zabývejme pouza celými čísly.
Tedy Random(11) generuje celá čísla v intervalu <0,10>
Ty ovšem potřebuješ interval <-5,5> a tedy musíš těch 5 odečíst (Tedy pokud chceš generovat celá čísla v intervalu <-5,5> musíš napsat Random(11)-5)
To by pro řešení úlohy také šlo, a dostal bys pouze body s celočíselnými souřadnicemi.
Aby situace odpovídala trochu víc reálu, tak jsem si zvolil, že budu souřadnice bodů dělat jako reálná čísla se dvěma desetinnými místy.
Potom Random(1001) generuje celá čísla v rozsahu <0,1000>, a když toto číslo podělím 100 dostanu interval
racionálních čísel <0,10>, která budou mít 2 desetinná místa (tedy např. 0,0.25,1.60,.....až 10)
Můžeš si zkusit generovat racionální čísla se třemi desetinnými místy v požadovaném intervalu a porovnat výsledky. (podle mě se počet bodů ležících v kouli o poloměru 5 nebude už tak moc lišit od toho co jsem ti napsal-ovšem pokud bys generoval pouze celočíselné souřadnice Random(11)-5 pak rozdíl bude podstatný)
Ještě se zamysli, jaká by se změnila podmínka, kdyby body mohly ležet i va povrchu koule.
Offline
↑ Honzc:
aha, jen mi není moc jasné že 1000/100 je 10, což je celočíselný, ale tím že se to dělí tak vznikají racionální čísla? => desetiná ? Každopádně jsem si to nechal vypsat a funguje to.
Offline
↑ Dopikasan:
1000/100 je opravdu deset, ale ty generuješ čísla od 0 do 1000, takže např. 528/100=5.28
V deklaraci proměnných pole A máš A array[1..max] of array [1..3] of Extended; což je reálné číslo. Mohlo by tam být i Real nebo Double.
Jinak racionální čísla jsou podmnožinou reálných čísel a to takovou, že racionální číslo se dá vyjádřit jako zlomek, který má v čitateli i jmenovateli celá čísla (což náš případ splňuje, neboť v čitateli máme celá čísla od 0 do 1000 a ve jmenovateli číslo 100)
Reálná čísla ještě mimo racionálních čísel obsahují tzv. iracionální čísla což je např. , nebo atd.
Offline
Stránky: 1