Punkt kratowy

0

Witam. Mam do rozwiązania takie zadanie:
"Punkt kratowy, to punkty należący do układu kartezjańskiego, którego
współrzędne są liczbami całkowitymi [np. (0, 0),(1, 0),(2, 1) itd.] Rozważ-
my koło o środku w początku układu współrzędnych i promieniu r. Niech
N(r) oznacza liczbę punktów kratowych znajdujących się w środku koła.
Napisz funkcję która dla zadanego r > 0 zwraca wartość N(r). Podaj ile
wynosi N(1), N(2.5), N(10)."

Udało mi się napisać taki program:

def N(r):
    
    ilosc = 0
    for x in range(0,r):
        for y in range(1,r+1):
            if (x*x + y*y) <= r*r:
                ilosc = ilosc + 1

    ilosc = ilosc * 4 + 1

    return ilosc


    
print("Podaj promien r")
r = int(input())

print(N(r))


Niestety nie jestem pewny jak zrobić żeby działało to też dla liczb typu float, ponieważ muszę sprawdzić też N(2.5).

1

Jak przyjmujesz r, nie konwertuj do inta, tylko do floata, a potem w pętli zamiast r+1, bierz sufit z r powiększony o 1.

0

O to mi chodziło. Dziękuję bardzo!

0

Mi się nasuwa takie rozwiązanie: w kwadracie o boku równym 2r będzie bodajże (\lfloor{r+1}\rfloor)^2 punktów a stosunek pola koła o promieniu r i takiego kwadratu jest równy \frac{\pi r^2}{4r^2} = \frac{\pi}{4} więc N(x) = \lfloor \frac{\pi}{4} (\lfloor{r+1}\rfloor)^2 \rfloor Ale nie sprawdzałem, czy się zgadza.

1 użytkowników online, w tym zalogowanych: 0, gości: 1