Matematické Fórum

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

#1 12. 05. 2013 15:18

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

pascal-trojrozměrné pole

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


Jsou věci, které nikdy nepochopím.

Offline

  • (téma jako vyřešené označil(a) Dopikasan)

#2 13. 05. 2013 14:05 — Editoval Honzc (13. 05. 2013 14:22)

Honzc
Příspěvky: 4549
Reputace:   241 
 

Re: pascal-trojrozměrné pole

↑ 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ž $P=\frac{4\pi }{24}\approx 0.5235$)

Po editaci:
Podívej se pro zajímavost Sem jak se dá počítat Ludolfovo číslo (a ještě si přitom zasportovat)

Offline

 

#3 14. 05. 2013 09:28

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: pascal-trojrozměrné pole

↑ 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?


Jsou věci, které nikdy nepochopím.

Offline

 

#4 14. 05. 2013 11:27 — Editoval Honzc (14. 05. 2013 11:29)

Honzc
Příspěvky: 4549
Reputace:   241 
 

Re: pascal-trojrozměrné pole

↑ 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

 

#5 14. 05. 2013 11:38

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: pascal-trojrozměrné pole

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


Jsou věci, které nikdy nepochopím.

Offline

 

#6 14. 05. 2013 12:06

Honzc
Příspěvky: 4549
Reputace:   241 
 

Re: pascal-trojrozměrné pole

↑ 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ř. $\sqrt{2}$,$\pi $ nebo $\text{tg}\frac{\pi }{3}$ atd.

Offline

 

#7 14. 05. 2013 12:10

Dopikasan
Příspěvky: 308
Škola: TUL FM
Pozice: student
Reputace:   
 

Re: pascal-trojrozměrné pole

↑ Honzc:
jojo už tomu rozumím, díky
"ty generuješ čísla od 0 do 1000, takže např. 528/100=5.28"
jsem asi néuplně chápal ten random. už je vše jasné. Díky


Jsou věci, které nikdy nepochopím.

Offline

 

Zápatí

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson