Количество точек в круге - QBasic
Формулировка задачи:
Дано случайное количество точек. Радиус круга задается вручную. Как узнать общее количество точек, которые попали в круг?
вот набросок:
как дальше не знаю, подскажите как решить?
Листинг программы
- CLS
- RANDOMIZE TIMER
- xmin = 0
- xmax = INT(RND(1) * 300)
- ymin = 0
- ymax = INT(RND(1) * 300)
- n = INT(RND(1) * 4000)
- INPUT "radius shara="; r
- SCREEN 12
- VIEW (20, 20)-(620, 460), , 8
- WINDOW (xmin, ymin)-(xmax, ymax)
- DIM x(n)
- DIM y(n)
- FOR i = 1 TO n
- x(i) = xmin + RND * (xmax - xmin)
- y(i) = ymin + RND * (ymax - ymin)
- PSET (x(i), y(i)), 5
- NEXT
- WINDOW (-150, 110)-(150, -110)
- CIRCLE (0, 0), r, 6
- PRINT "sumarno="; n: PRINT "kolvo t v share?"
Решение задачи: «Количество точек в круге»
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
Объяснение кода листинга программы
RANDOMIZE TIMER
— данная команда позволяет генерировать случайные числа с использованием текущего времени как источника энтропии.xmax = 640: ymax = 480
— определение максимальных значений координат экрана.SCREEN 12
— выбор экрана с координатами 1280x1024.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
— очистка экрана с параметром 2 (без закрашивания каретки).CIRCLE (cx, cy), r, 14
— рисование круга с заданными координатами и радиусом.kol = 0
— инициализация счётчика точек внутри круга.FOR i = 1 TO n
— начало цикла для рисования точек внутри круга.x = RND * xmax
— генерация случайной координаты по горизонтали.y = RND * ymax
— генерация случайной координаты по вертикали.PSET (x, y), 12
— рисование точки с заданными координатами и размером 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
- vyhod...`` — вывод строки с инструкцией по выходу из программы. - `DO: Choice$ = INKEY$: LOOP WHILE Choice$ = ``` — начало цикла ожидания нажатия клавиши для выхода из программы.
SCREEN 0, 0, 0, 0
— очистка экрана и возврат в основную программу.END
— окончание программы.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д