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

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

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

Дано случайное количество точек. Радиус круга задается вручную. Как узнать общее количество точек, которые попали в круг? вот набросок:
Листинг программы
  1. CLS
  2. RANDOMIZE TIMER
  3. xmin = 0
  4. xmax = INT(RND(1) * 300)
  5. ymin = 0
  6. ymax = INT(RND(1) * 300)
  7. n = INT(RND(1) * 4000)
  8. INPUT "radius shara="; r
  9. SCREEN 12
  10. VIEW (20, 20)-(620, 460), , 8
  11. WINDOW (xmin, ymin)-(xmax, ymax)
  12. DIM x(n)
  13. DIM y(n)
  14. FOR i = 1 TO n
  15. x(i) = xmin + RND * (xmax - xmin)
  16. y(i) = ymin + RND * (ymax - ymin)
  17. PSET (x(i), y(i)), 5
  18. NEXT
  19. WINDOW (-150, 110)-(150, -110)
  20. CIRCLE (0, 0), r, 6
  21. PRINT "sumarno="; n: PRINT "kolvo t v share?"
как дальше не знаю, подскажите как решить?

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

textual
Листинг программы
  1. RANDOMIZE TIMER
  2. xmax = 640: ymax = 480
  3. SCREEN 12
  4. WIDTH 80, 30
  5. DO
  6.   CLS
  7.   cx = xmax / 2: cy = ymax / 2
  8.   DO
  9.     PRINT "radius 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
  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
  20.       IF SQR((cx - x) ^ 2 + (cy - y) ^ 2) < r THEN kol = kol + 1
  21.   NEXT
  22.   PRINT "Radius = "; r
  23.   PRINT "Tochek ="; n: PRINT "Tochek v kruge "; kol
  24.   LOCATE 30, 1: PRINT "<Esc> - vyhod...";
  25.   DO: Choice$ = INKEY$: LOOP WHILE Choice$ = ""
  26. LOOP UNTIL Choice$ = CHR$(27)
  27. SCREEN 0, 0, 0, 0
  28. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы