Özel açılarda günah, cos ve bronzluk yazdırın


9

Trigonometride "özel açılar" olarak bilinen belirli açılar vardır. Bunun nedeni, bu açılardan birinin günah, cos veya bronzlaşmasını aldığınızda, hatırlanması kolay bir sonuç almanızdır, çünkü rasyonel bir sayının kare köküdür. Bu özel açılar daima ya pi/6, ya da katlarıdır pi/4. İşte tüm özel açıların ve karşılık gelen trig değerlerinin bir görselleştirmesi.

trig değerleri

Gördüğünüz gibi, her açı için karşılık gelen bir sayı çifti. İlk sayı bu açının kosinüsü, ikincisi bu açının sinüsüdür. Bu açılardan birinin tanjantını bulmak için, günahı cos'a böl. Örneğin tan(pi/6), eşittir

sin(pi/6) / cos(pi/6) == 
(1/2) / (√3/2) ==
1/√3 ==
√3/3

Meydan okuma

3 giriş alan tam bir program yazmalısınız.

  1. Hesaplamanız gereken trig işlevini temsil eden tek bir karakter. Bu ya 's' (günah), 'c' (cos) ya da 't' (tan) olacaktır.

  2. Giriş açısının payı. Bu herhangi bir pozitif tam sayı olabilir. 5 girişinin payın 5 * pi olduğu anlamına geldiğine dikkat edin.

  3. Giriş açısının paydası. Bu her zaman aşağıdakilerden biri olacaktır:1, 2, 3, 4, 6

Sonra bu açının trig fonksiyonunun tam değerini yazdırın. İşte 2 * pi'ye kadar tüm açıların günah, cos ve tan listesi:

sin(0pi):    0
sin(pi/6):   1/2
sin(pi/4):   root(2)/2
sin(pi/3):   root(3)/2
sin(pi/2):   1
sin(2pi/3):  root(3)/2
sin(3pi/4):  root(2)/2
sin(5pi/6):  1/2
sin(1pi):    0
sin(7pi/6):  -1/2
sin(5pi/4):  -root(2)/2
sin(4pi/3):  -root(3)/2
sin(3pi/2):  -1
sin(5pi/3):  -root(3)/2
sin(7pi/4):  -root(2)/2
sin(11pi/6): -1/2
sin(2pi):    0

cos(0pi):    1
cos(pi/6):   root(3)/2
cos(pi/4):   root(2)/2
cos(pi/3):   1/2
cos(pi/2):   0
cos(2pi/3):  -1/2
cos(3pi/4):  -root(2)/2
cos(5pi/6):  -root(3)/2
cos(1pi):    -1
cos(7pi/6):  -root(3)/2
cos(5pi/4):  -root(2)/2
cos(4pi/3):  -1/2
cos(3pi/2):  0
cos(5pi/3):  1/2
cos(7pi/4):  root(2)/2
cos(11pi/6): root(3)/2
cos(2pi):    1

tan(0pi):    0
tan(pi/6):   root(3)/3
tan(pi/4):   1
tan(pi/3):   root(3)
tan(pi/2):   nan
tan(2pi/3):  -root(3)
tan(3pi/4):  -1
tan(5pi/6):  -root(3)/3
tan(1pi):    0
tan(7pi/6):  root(3)/3
tan(5pi/4):  1
tan(4pi/3):  root(3)
tan(3pi/2):  nan
tan(5pi/3):  -root(3)
tan(7pi/4):  -1
tan(11pi/6): -root(3)/3
tan(2pi):    0

2pi'den büyük bir sayı alırsanız, aralıktaki bir sayı elde edene kadar 2pi çıkarın. Örneğin, == 1/2 ile sin(17pi/6)aynıdır sin(5pi/6). Programınızın temel sadeleştirme yapması beklenir, örneğin, girdiniz == 0 ile cos(2pi/4)aynı ise. cos(pi/2)Yerleşik trigonometri işlevlerine izin verilmez.

Bayt cinsinden en kısa cevap kazanır!


Çıktı biçimi tam olarak belirtildiği gibi olmalı mı?
lirtosiast

@ThomasKwa evet.
James


@DigitalTrauma Haha, bu bir sonraki zorluk olacak! Jk ...
James

Yanıtlar:


2

Pyth, 125 122 bayt

Formül kullanır n = 4 - |floor(4.5-9k)|, kπ = θsöz konusu olduğunda, özel olan açısını belirlemek için, yani, k, ikinci ve üçüncü girdi oranı olup: 0, 30, 45, 60 ve 90 derece, sırasıyla, 0 ile 4 sayılı açıları ve 90 ~ 180 derece açıları tersine döner; bu formül işe yarıyor θ∈[0,π]. Karşılık gelen sinüslerin değerleri olur sqrt(n)/2ve var olur, sıfır olmayan teğetler olur 3^(n/2-1). Ancak, benim uygulama çıktı biçimi daha yüksek kontrol için sabit kodlu sıkıştırılmış dizeleri olan listeleri kullanır ve kod da bu şekilde daha kısa görünüyor.

A,c." t8¾Îzp³9ÓÍÕ¬$ ·Íb³°ü"dc." t@a'óè©ê¶oyÑáîwÀ(";J+cEE?qz\c.5ZK-4.as-4.5*3*3%J1?qz\t+?>%J1 .5\-k@GK+?>%J2 1\-k@HK

Şimdi pythonic sözde koduna çevirelim:

                                   z = input()
                                   k = ""
                                   d = " "
                                   Z = 0
A,c." t8¾Îzp³9ÓÍÕ¬$ ·Íb³°ü"d       G = "0 sqrt(3)/3 1 sqrt(3) nan".split(d)
  c." t@a'óè©ê¶oyÑáîwÀ(";          H = "0 1/2 sqrt(2)/2 sqrt(3)/2 1".split()
J+cEE                              J = eval(input())/eval(input()) +
  ?qz\c.5Z                             0.5 if z == "c" else Z
                                   # the second term converts sin to cos
K-4.as-4.5*3*3%J1                  K = 4 - abs(int(4.5 - 3*3*(J%1)))
                                   # 9* would lose precision so 3*3* instead
?qz\t                              if z == "t"
  +?>%J1 .5\-k                         print(("-" if J%1 > 0.5 else k) +
   @GK                                     G[K])
                                   else:
  +?>%J2 1\-k                          print(("-" if J%2 > 1 else k) +
   @HK                                     H[K])

Çevrimiçi test edin .

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.