Количество точек в круге - QBasic

Узнай цену своей работы

Формулировка задачи:

Дано случайное количество точек. Радиус круга задается вручную. Как узнать общее количество точек, которые попали в круг? вот набросок:
как дальше не знаю, подскажите как решить?

Решение задачи: «Количество точек в круге»

textual
Листинг программы
RANDOMIZE TIMER
xmax = 640: ymax = 480
SCREEN 12
WIDTH 80, 30
DO
  CLS
  cx = xmax / 2: cy = ymax / 2
  DO
    PRINT "radius kruga ot 1  do "; ymax \ 2; " (0-vyhod) = "; : INPUT "", r
    IF r = 0 THEN SCREEN 0, 0, 0, 0: END
  LOOP UNTIL (r > 0) AND (r <= ymax \ 2)
  n = INT(RND(7) * 2000)
  CLS 2
  CIRCLE (cx, cy), r, 14
  kol = 0
  FOR i = 1 TO n
      x = RND * xmax
      y = RND * ymax
      PSET (x, y), 12
      IF SQR((cx - x) ^ 2 + (cy - y) ^ 2) < r THEN kol = kol + 1
  NEXT
  PRINT "Radius = "; r
  PRINT "Tochek ="; n: PRINT "Tochek v kruge "; kol
  LOCATE 30, 1: PRINT "<Esc> - vyhod...";
  DO: Choice$ = INKEY$: LOOP WHILE Choice$ = ""
LOOP UNTIL Choice$ = CHR$(27)
SCREEN 0, 0, 0, 0
END

Объяснение кода листинга программы

  1. RANDOMIZE TIMER — данная команда позволяет генерировать случайные числа с использованием текущего времени как источника энтропии.
  2. xmax = 640: ymax = 480 — определение максимальных значений координат экрана.
  3. SCREEN 12 — выбор экрана с координатами 1280x1024.
  4. WIDTH 80, 30 — установка размеров окна программы.
  5. DO — начало бесконечного цикла.
  6. CLS — очистка экрана.
  7. cx = xmax / 2: cy = ymax / 2 — определение координат центра круга.
  8. DO — начало цикла определения радиуса круга.
  9. PRINTradius kruga ot 1 do ; ymax \ 2; (0-vyhod) = ; : INPUT ``, r — запрос ввода радиуса круга.
  10. IF r = 0 THEN SCREEN 0, 0, 0, 0: END — проверка ввода, выход из программы при вводе нулевого радиуса.
  11. LOOP UNTIL (r > 0) AND (r <= ymax \ 2) — условие цикла, пока радиус больше нуля и меньше половины максимальной высоты экрана.
  12. n = INT(RND(7) * 2000) — генерация случайного числа для определения количества точек внутри круга.
  13. CLS 2 — очистка экрана с параметром 2 (без закрашивания каретки).
  14. CIRCLE (cx, cy), r, 14 — рисование круга с заданными координатами и радиусом.
  15. kol = 0 — инициализация счётчика точек внутри круга.
  16. FOR i = 1 TO n — начало цикла для рисования точек внутри круга.
  17. x = RND * xmax — генерация случайной координаты по горизонтали.
  18. y = RND * ymax — генерация случайной координаты по вертикали.
  19. PSET (x, y), 12 — рисование точки с заданными координатами и размером 12.
  20. IF SQR((cx - x) ^ 2 + (cy - y) ^ 2) < r THEN kol = kol + 1 — проверка попадания точки внутрь круга по заданному радиусу.
  21. NEXT — переход к следующей итерации цикла.
  22. PRINTRadius = ; r — вывод значения радиуса круга.
  23. PRINTTochek =; n — вывод количества точек, определенных в круге.
  24. PRINTTochek v kruge ; kol — вывод количества точек, попавших внутрь круга.
  25. LOCATE 30, 1: PRINT - vyhod...`` — вывод строки с инструкцией по выходу из программы.
  26. `DO: Choice$ = INKEY$: LOOP WHILE Choice$ = ``` — начало цикла ожидания нажатия клавиши для выхода из программы.
  27. SCREEN 0, 0, 0, 0 — очистка экрана и возврат в основную программу.
  28. END — окончание программы.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

9   голосов , оценка 3.667 из 5
Похожие ответы