
Проблема заключается в том что на месте, которое выделено "//...//" PascalABC.Net говорит, что там ошибка, пожалуйста помогите, укажите ошибку и если есть возможность её исправить, это срочно program Zmeya;
Uses graphabc, events,timers;
const
r=5 ;
d=7;
type
TDirection = (None, Left, Right, Up, Down);
var x,t,y,i,z,xr,yr,prin1,prin2,prin3,prin4,prin5,k,s4et,prin6: integer;
Direction :TDirection;
xs,ys,bufx,bufy:array[1..200]of integer;
procedure shar3;
begin
SetBrushColor(clYellow);
circle(xs[k],ys[k],r);
end;
procedure Circl;
begin
SetBrushColor(clBlack);
circle(x,y,r);
end;
procedure rshar ;
begin
xr:=Random(WindowWidth) ;
yr:=Random( WindowHeight);
end;
procedure rshar2;
begin
SetBrushColor(clYellow);
circle(xr,yr,r);
end;
procedure XP(Key:integer);
begin
case Key of
VK_Left: Direction := Left ;
VK_Right: Direction := Right ;
VK_UP: Direction := UP ;
VK_Down: Direction :=Down ;
end;
circle(x,y,r);
end;
procedure pause;
begin
// for i:=1 to 1 do //
begin
Circl;
rshar2;
ClearWindow;
rshar2 ;
prin1:=(xr-x+r)*(xr-x+r)+(yr-y)*(yr-y) ;
prin2:=(xr-x-r)*(xr-x-r)+(yr-y)*(yr-y) ;
prin3:=(xr-x)*(xr-x)+(yr-y+r)*(yr-y+r) ;
prin4:=(xr-x)*(xr-x)+(yr-y-r)*(yr-y-r) ;
prin5:=R*R;
if (prin1)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
if (prin2)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
if (prin3)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
if (prin4)<=(prin5) then begin
rshar ;
s4et:=s4et+1;
end;
case Direction of
Left: begin x:=x-d; if x<=0 then x:=WindowWidth end;
Up: begin y:=y-d; if y<=0 then y:=WindowHeight end;
Right: begin x:=x+d; if x>=WindowWidth then x:=0 end;
Down: begin y:=y+d; if y>=WindowHeight then y:=0 end;
end;
xs[1]:=x;
ys[1]:=y;
for k:=1 to s4et do
begin
bufx[k]:=xs[k];
bufy[k]:=ys[k];
end;
for k:=1 to s4et do
begin
xs[k+1]:=bufx[k];
ys[k+1]:=bufy[k] ;
end;
for k:=2 to s4et do
shar3;
Circl;
end;
end;
begin
rshar;
s4et:=2;
Direction := None;
x:=WindowWidth div 2;
y:=WindowHeight div 2;
OnKeyDown:=XP;
CreateTimer(150,pause);
end.
Ответы на вопрос

В данном коде ошибка связана с областью, которая выделена комментарием //...//
в процедуре pause
. Рассмотрим эту процедуру более детально и выявим проблему.
Анализ ошибки
В коде можно заметить следующие потенциальные проблемы:
Лишние операторы присваивания и неверное использование условий: При использовании сравнений в PascalABC.Net нужно обратить внимание на операторы
<=
,>=
,<
,>
, которые должны использоваться с обычными условиями, а не с заменой на HTML-символы, такие как<
,>
, и т.д. PascalABC не распознает их как операторы, а это приводит к ошибке компиляции.Необходимость очистки экрана и отрисовки объектов в правильной последовательности: Учитывая, что
ClearWindow
вызывается несколько раз в процессе отрисовки, это может создавать ошибки, особенно если отрисовка объектов идет до очистки экрана.
Исправление кода
Для корректной работы следует внести следующие изменения:
- Замените
<
и>
на<
и>
. - Проверьте порядок вызовов функций
ClearWindow
иrshar2
, чтобы они не очищали экран до отрисовки нужных объектов.
Исправленный код
Объяснение изменений
- Замена операторов: Исправлены
<
и>
на стандартные операторы сравнения (<
и>
). - Упрощение условия попадания в круг: Использовано объединение условий с помощью
or
, что позволяет уменьшить код и избежать повторений. - Порядок вызовов функций: Убедились, что
ClearWindow
вызывается перед началом отрисовки, а не после, чтобы объекты отображались корректно.
Эти изменения должны устранить ошибку и обеспечить правильную работу программы.
Похожие вопросы









Топ вопросов за вчера в категории Информатика









Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili