Çözüldü Python'da olasılık hesaplama nasıl yapılır?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

ONURCAN_B

Hectopat
Katılım
10 Ekim 2020
Mesajlar
22
Çözümler
1
Arkadaşlar merhaba bunu Python'da nasıl yapabilirim?

Bir çubuk rastgele üç parçaya ayrılıyor. Ayrılan parçalar ile bir üçgen oluşma olasılığı nedir?
(Çubuk 10 cm)
 
Son düzenleyen: Moderatör:
Çözüm
Rastgele değerler kullanılacağı için örnek uzayını artırmak asıl sonuca yaklaştırsa da tam olarak ulaşmamış olursunuz. Değerden çok neden öyle olduğu daha önemli bence. Bu şekilde yazdım ben. Yine de yaklaştığı değer doğru değil. Nedenini de sen bul.

Kodsuz çözüm: Probability of cutting a rope into three pieces such that the sides form a triangle - GeeksforGeeks

Kod:
import random
import time

valid = 0
invalid = 0
n = 100_000_000
start = time.perf_counter()

for i in range(n):
    a = random.uniform(0.0, 10.0)
    b = random.uniform(0.0, 10.0 - a)
    c = 10.0 - a - b

    if a + b > c and abs(a - b) < c:
        valid += 1
    else:
        invalid += 1

print(valid / (valid + invalid))
print(time.perf_counter() - start)
Üçgen oluşturmak için bir kural vardır. Bu kural: Bir kenar uzunluğu; diğer iki kenar uzunluğunun toplamından küçük, farkından büyük olması gerekir.

3-4-5 üçgenini ele alalım.

3 birim uzunluğundaki kenar 4+5 = 9'dan küçük, 5-4 = 1'den büyüktür.
4 birim uzunluğundaki kenar 3+5 =8'den küçük, 5-3 = 2'den büyüktür.
5 birim uzunluğundaki kenar 3+4 = 7'den küçük, 4-3 = 1'den büyüktür.

Bundan dolayı 3-4-5 uzunluğundaki parçalardan bir üçgen oluşturulabilir.


10 cm uzunluğundaki çubuğun bölünebileceği tüm durumlarda bu şartın sağlanma olasılığına bakmanız gerekmekte.

Direkt olarak kodu yazmaktansa mantığını aktarıp sizin üstüne düşünerek yazmanızın daha iyi olacağını düşünüyorum. :)
 
Üçgen oluşturmak için bir kural vardır. Bu kural: Bir kenar uzunluğu; diğer iki kenar uzunluğunun toplamından küçük, farkından büyük olması gerekir.

3-4-5 üçgenini ele alalım.

3 birim uzunluğundaki kenar 4+5 = 9'dan küçük, 5-4 = 1'den büyüktür.
4 birim uzunluğundaki kenar 3+5 =8'den küçük, 5-3 = 2'den büyüktür.
5 birim uzunluğundaki kenar 3+4 = 7'den küçük, 4-3 = 1'den büyüktür.

Bundan dolayı 3-4-5 uzunluğundaki parçalardan bir üçgen oluşturulabilir.

10 cm uzunluğundaki çubuğun bölünebileceği tüm durumlarda bu şartın sağlanma olasılığına bakmanız gerekmekte.

Direkt olarak kodu yazmaktansa mantığını aktarıp sizin üstüne düşünerek yazmanızın daha iyi olacağını düşünüyorum. :)

Cevabınız için teşekkür ederim ama bu işlerde çok yeniyim ve bu benim ödevim. Kodu yazsanız benim için daha iyi çünkü vakit sıkıntım var.
 
Rastgele değerler kullanılacağı için örnek uzayını artırmak asıl sonuca yaklaştırsa da tam olarak ulaşmamış olursunuz. Değerden çok neden öyle olduğu daha önemli bence. Bu şekilde yazdım ben. Yine de yaklaştığı değer doğru değil. Nedenini de sen bul.

Kodsuz çözüm: Probability of cutting a rope into three pieces such that the sides form a triangle - GeeksforGeeks

Kod:
import random
import time

valid = 0
invalid = 0
n = 100_000_000
start = time.perf_counter()

for i in range(n):
    a = random.uniform(0.0, 10.0)
    b = random.uniform(0.0, 10.0 - a)
    c = 10.0 - a - b

    if a + b > c and abs(a - b) < c:
        valid += 1
    else:
        invalid += 1

print(valid / (valid + invalid))
print(time.perf_counter() - start)
 
Çözüm
Rastgele değerler kullanılacağı için örnek uzayını artırmak asıl sonuca yaklaştırsa da tam olarak ulaşmamış olursunuz. Değerden çok neden öyle olduğu daha önemli bence. Bu şekilde yazdım ben. Yine de yaklaştığı değer doğru değil. Nedenini de sen bul.

Kodsuz çözüm: Probability of cutting a rope into three pieces such that the sides form a triangle - GeeksforGeeks

Kod:
import random
import time

valid = 0
invalid = 0
n = 100_000_000
start = time.perf_counter()

for i in range(n):
    a = random.uniform(0.0, 10.0)
    b = random.uniform(0.0, 10.0 - a)
    c = 10.0 - a - b

    if a + b > c and abs(a - b) < c:
        valid += 1
    else:
        invalid += 1

print(valid / (valid + invalid))
print(time.perf_counter() - start)
Cevabınız için teşekkür ederim. Gerçekten acemiyim bu konularda umarım kodun devamını yazabilirim 🙂 .
 

Yeni konular

Geri
Yukarı