Legyen a;b ϵ [0;2] . Mennyi annak a valószínűsége, hogy a²+ b² ≤ 2 ?
A helyes módszer a P(a;b) koordinátájú pontok alaphalmazán a kedvező koordinátájú pontokat keresni, így a keresett valószínűség p = π/8.
Abban kérnék segítséget, hogy hol elvi hibás a következő gondolatmenet:
a megadott alaphalmazon min(a²+ b²) = 0, max(a²+ b²) = 8, így a keresett valószínűség p = 2/8. Vagyis mivel magyarázható, hogy a szakaszhosszúságok nem alkalmasak a területek helyett? Előre is köszönöm a választ!
Tekintsünk két vektort: a(cos(x);sin(x)) és b(b;a), hajlásszögük legyen fi. Vegyük a skalárszorzatukat:
a * b = abs(a) * abs(b) * cos(fi) Koordinátákkal kifejezve és rendezve:
a * sin(x) + b * cos(x) = sqrt(sin2(x)+cos2(x)) * sgrt(a2 + b2) * cos(fi)
a * sin(x) + b * cos(x) = sgrt(a2 + b2) * cos(fi)
Ez cos(fi) = 1 esetén maximális, ekkor a maximum éppen sgrt(a2 + b2)
Fentiek egy jó gyakorlati hasznosítása lehet az
a*sin(x) + b*cos(x) = c (a * b és c nem egyenlő 0) alakú egyenletek megoldásánál az egyenlet mindkét oldalának sgrt(a2 + b2) - tel való osztása, majd valamelyik alkalmas addíciós tétel alkalmazása.
Amúgy ez érdekes általában is: fogod a sin(x)-et, eltolod valamennyivel és megszorzod valamennyivel, majd hozzáadod a sin(x)-hez és az eredmény is a sin(x) függvény egy eltolt, konstanssal szorzott változata lesz. Kicsit meglep.
Így elsőre csak csúnya megoldásom van. Kéne legyen valami szép is.
Először azt kéne tudni, hol maximális az a*sin(x)+b*cos(x). Az egyszerűség kedvéért tegyük fel, hogy a, b > 0. Akkor x-et a 0 ... pi/2 intervallumban keressük. Szerintem menni kéne ennek elemi úton is, de deriváljuk most és nézzük a 0 helyét (szélsőérték keresés): d/dx(a sin x + b cos x) = a cos x - b sin x. Ennek a 0 helyére igaz, hogy tg x = a/b.
Ekkor, tudva, hogy tg x = a/b:
a sin x + b cos x = a*gyök((1-cos2x)/2)+b*gyök((1+cos2x)/2
Most az kell, hogy cos 2x = (1-tg^2(x))/(1+tg^2(x))=(b^2-a^2)/(a^2+b^2)
Szerintem ne erőltesd ezt a programozósdit, és nemcsak azért ne feszegesd ezt, mert itt offtopic (hidd el, nem gúnyolódásból mondom, de inkább dobd el ezt a szálat)!
Azt elismerem, hogy ezek a megoldások programozói agyrémek, de ha jól van kódolva, akkor biztosan futni fognak .
1. kimaradt belőle a ciklus tag:
function alma (){
ciklus {
alma() // ez rekurzionál
if () {} // kilépés a végtelen rekurzióból
}
}
2. Abban segít, hogy az egymásba ágyazott ciklusok sorozatát változónak veheted annélkül, hogy függvényel kelene rekurzionálnod .
3. Evvel a programozó nagyon gyorsan le tudja kódolni, amit akar; igen könyen átlátható . Épen hogy ez nem hprror, hanem a 1. és a 2. pont a horror, mármint akkor ha futásidejű hibát kell keresgélni bennük, különösen a 2. pontos a kényelmetlenebb .
Ez az egész tök off, de még egyet beleírok: >> Még sokat kell(ene) tanulnod ahhoz, hogy rájöjjél, mennyire keveset tudsz...
> Az én napomban is csak 24 óra van, nem tudok többet csinálni belőle .
Ezt elfogadom persze, de ha nem értesz hozzá, akkor ne taníts butaságokat annak, akik itt kérdeznek!
Az 1. megoldásodban hibásan írtad le a rekurziót (rájössz, hol a hiba?), de még ha jól is írtad volna, sem mond semmivel többet, mint az, hogy "rekurzió". Aki eddig nem tudta, most sem fogja tudni.
A 2. ez az execute-osdi semmilyen fordított (azaz nem interpretált) nyelvben nem fog működni, de nem is világos, itt miben segítene.
A 3. módszered "megírod az összes mélységre az egymásba ágyazott ciklusokat" meg csak simán horror ronda, rossz és kerülendő módszer, és épp arról szólt az eredeti kérdés, hogy hogyan lehetne ezt kikerülni.
Igazából nem hiszem, hogy megfogadnád a tanácsom, de ha valaki később idetéved, remélem segít neki ez helyén kezelni a dolgokat.
3. ha a ciklusmélység véges kicsi, akkor megírod az összes mélységre az egymásba ágyazott ciklusokat, és mindegyik ciklus mélység szinthez teszel egy feltételes kilépőt, ami változóra is reagálhat; ezt a változót meg ott adod meg ahol akarod, pl. az elején sőt a cikluson kívül is .
Például így: írsz egy ciklust, ahol minden kör elején vagy végén piszkálod a ciklusváltozótömböt valami algoritmussal, és edöntöd azt is, hogy van-e következő kör.
Mivel nem volt szmájli, komolyan veszem és úgy válaszolok. Bocs, ha viccnek szántad.
Nem tákoltam, hanem írtam egy programot, és nem egy-két nap, hanem kb. ennyi óra alatt, de inkább kevesebb. A futás eredménye az 16594. hozzászólásban.
Pedig egy-két munkanapot rászánva lehetne tákolni egy programot, ami kimutatná, hogy nincs jobb megoldás annál, ami már amúgy is kijött próbálgatással.