Punkt krawtowy przy pomocy float

Punkt krawtowy przy pomocy float
S1
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:2
0

Cześć. Muszę zrobić to zadanie a nie mam pojęcia jak się za to zabrać. Punkt kratowy to punkt, którego współrzędne w układzie kartezjańskim są liczbami całkowitymi. Dane jest koło
o środku w początku układu współrzędnych i promieniu r. Znajdź wszystkie punkty kratowe leżące wewnątrz
takiego koła.

edytowany 1x, ostatnio: szybki12111
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
1

Brutal force:

Dwie pętle po x,y od math.ceil (-r) do math.floor(+r) i sprawdzasz pitagorasem


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 3x, ostatnio: AnyKtokolwiek
S1
  • Rejestracja:ponad 4 lata
  • Ostatnio:ponad 4 lata
  • Postów:2
0

Napisałem coś takiego i jak mogę to przerobić?

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 = float(input())

print(N(r))

Tasmanian Devil
Hej! Twój post prawdopodobnie zawiera niesformatowany kod. Użyj znaczników ``` aby oznaczyć, co jest kodem, będzie łatwiej czytać. (jestem botem, ta akcja została wykonana automatycznie, prawdopodobieństwo 0.99982166)
AK
  • Rejestracja:prawie 7 lat
  • Ostatnio:około miesiąc
  • Postów:3561
2
  1. Dlaczego odmiennie masz pętlę po X a po Y?
  2. "znajdź wszystkie punkty" rozumiem nie podać ilość, tylko je wylistować
  3. Podoba mi się, że nie robisz roboty w mainie, tylko w funkcji
    Ja rozumiem, użyć pustej listy list = [ ] i w ifie dołączać przez append() - tę listę potem return

Gotowca ci nie dam, masz pełne wskazówki.


Bo C to najlepszy język, każdy uczeń ci to powie
edytowany 4x, ostatnio: AnyKtokolwiek
lion137
  • Rejestracja:około 8 lat
  • Ostatnio:2 minuty
  • Postów:4936
0

Zacznij od Wiki
https://en.m.wikipedia.org/wiki/Gauss_circle_problem

@szybki12111: Naiwnie Ci podał @AnyKtokolwiek, wychodzi z tego taki, paskudny kod:

Kopiuj
def N(r):
  cnt = 0
  for x in range(int(math.ceil(-r)), int(math.floor(r)) + 1):
    for y in range(int(math.ceil(-r)), int(math.floor(r)) + 1):
      if x * x + y * y <= r * r:
        cnt += 1
  return cnt

Optymalizować można, szukanie dzielników, faktoryzacja...


edytowany 2x, ostatnio: lion137
AK
Wyczytujesz w zadaniu, ze chodzi o ilość? Ja sądzę inaczej
lion137
Nie, ale w kolejnym objaśnił.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.