Я писал файл CMD BATCH, чтобы рисовать некоторые элементы на экране с помощью символов ascii.Я написал довольно простую настройку, чтобы сделать круги на экране, используя вариант формулы расстояния.НО результаты не совсем правильные.
В то время как он рисует круги (в основном), в верхней и левой части происходят странности.Чтобы попытаться отладить это, я выкладываю фактические результаты набора /A
в .csv, и похоже, что математика выполняется правильно, и она получает правильный результат.НО, когда он использует число if !variable! geq
, он не будет надежно оцениваться правильно (просто БОЛЬШЕ времени).
Вот урезанная версия кода, которая все еще имеет проблему:
SETLOCAL ENABLEDELAYEDEXPANSION
@ECHO OFF
CLS
MODE CON: COLS=100 LINES=102
COLOR 0A
IF EXIST OUTPUT.MAP DEL OUTPUT.MAP
IF EXIST MATHCHECK.CSV DEL MATHCHECK.CSV
SET STATUSLINE=-
FOR /L %%Y IN (2,1,79) DO (
FOR /L %%X IN (2,1,79) DO (
SET DRAWCHAR%%X%%Y=.
)
CLS
ECHO !STATUSLINE!
SET STATUSLINE=!STATUSLINE!-
)
SET STATUSLINE=-
FOR /L %%Y IN (2,1,79) DO (
FOR /L %%X IN (2,1,79) DO (
SET /A "SQDISTANCE=((405-%%X*10)*(405-%%X*10))+((405-%%Y*10)*(405-%%Y*10))"
IF !SQDISTANCE! GEQ 129600 SET DRAWCHAR%%X%%Y=^^
ECHO 129600,^^^^,%%X,%%Y,!SQDISTANCE!,!DRAWCHAR%%X%%Y!>>MATHCHECK.CSV
)
CLS
ECHO !STATUSLINE!
SET STATUSLINE=!STATUSLINE!-
)
SET STATUSLINE=-
FOR /L %%Y IN (2,1,79) DO (
FOR /L %%X IN (2,1,79) DO (
SET /A "SQDISTANCE=((405-%%X*10)*(405-%%X*10))+((405-%%Y*10)*(405-%%Y*10))"
IF !SQDISTANCE! GEQ 144400 SET DRAWCHAR%%X%%Y=M
ECHO 144400,M,%%X,%%Y,!SQDISTANCE!,!DRAWCHAR%%X%%Y!>>MATHCHECK.CSV
)
CLS
ECHO !STATUSLINE!
SET STATUSLINE=!STATUSLINE!-
)
SET STATUSLINE=-
FOR /L %%Y IN (2,1,79) DO (
SET DRAWLINE%%Y=-
FOR /L %%X IN (2,1,79) DO (
SET DRAWLINE%%Y=!DRAWLINE%%Y!!DRAWCHAR%%X%%Y!
)
SET DRAWLINE%%Y=!DRAWLINE%%Y:~1,79!
ECHO !DRAWLINE%%Y!>>OUTPUT.MAP
CLS
ECHO COMPILING OUTPUT...
ECHO !STATUSLINE!
SET STATUSLINE=!STATUSLINE!-
)
CLS
ECHO +------------------------------------------------------------------------------+-------------------+
FOR /L %%D IN (2,1,79) DO (
ECHO ^|!DRAWLINE%%D!^|! ^|
)
ECHO +------------------------------------------------------------------------------+-------------------+
PAUSE
Вот результаты, которые я получаю: https://drive.google.com/open?id=1Rwp2YCBwJCArkVunqBNXa3CDuJhTSVSm
Это должно выглядеть как квадрат Ms с кругом ^ s в нем, а затем кругом .s в этом.Это в основном верно, но лишних зазубрин M и ^ вверху и слева не должно быть.
Математическая формула ДОЛЖНА быть правильной.это просто A^2+B^2=C^2
.
Чтобы понять это, я выкладываю файл mathcheck.csv, который имеет:
- Тестовое значение
- Символвыводить, если geq, тестовое значение
- Координаты x и y
- Расчетное квадратное расстояние от центра
- Результирующий символ, который программа использовала.
Если вы прокрутите этот файл, вы сможете увидеть случаи, когда в результате получается, что вычисленное значение больше, чем тестовое значение, даже если они НЕ.
Я пробовал все виды вещей:использование lss вместо geq (и переключение значений), поиск и настройка команды set / a, поиск и настройка if, «рисование» в другом порядке (если вы рисуете все Ms, то рисуете меньшие круги сверху вместоначиная с .s и надевая кольца, вы получаете очень похожую ошибку в той же общей области).
В этот момент я почти уверен, что я либо придумал что-то очевидное в коде, ИЛИ, если сравнения чиселпросто не достаточно надежны, чтобы это работало?хотя это кажется невозможным.Это должно быть ошибка кода.