Количество точек в круге - 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
Объяснение кода листинга программы
RANDOMIZE TIMER— данная команда позволяет генерировать случайные числа с использованием текущего времени как источника энтропии.xmax = 640: ymax = 480— определение максимальных значений координат экрана.SCREEN 12— выбор экрана с координатами 1280x1024.WIDTH 80, 30— установка размеров окна программы.DO— начало бесконечного цикла.CLS— очистка экрана.cx = xmax / 2: cy = ymax / 2— определение координат центра круга.DO— начало цикла определения радиуса круга.PRINTradius 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— переход к следующей итерации цикла.PRINTRadius =; r— вывод значения радиуса круга.PRINTTochek =; n— вывод количества точек, определенных в круге.PRINTTochek v kruge; kol— вывод количества точек, попавших внутрь круга.LOCATE 30, 1: PRINT- vyhod...`` — вывод строки с инструкцией по выходу из программы. - `DO: Choice$ = INKEY$: LOOP WHILE Choice$ = ``` — начало цикла ожидания нажатия клавиши для выхода из программы.
SCREEN 0, 0, 0, 0— очистка экрана и возврат в основную программу.END— окончание программы.