• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Паскаль, масштабирование фигуры

Алекс375

Ученик
Регистрация
15 Ноя 2012
Сообщения
2
Реакции
0
Баллы
0
Паскаль, масштабирование фигуры

вот код программы моей, что неверно? что то в конце нужно добавить или как. фигура должна увеличиваться с нажатием клавиши Enter и обратно уменьшаться..

Код:
Uses Graph,CRT;
var
Driver, Mode:Integer;
x,y,a,d:integer;
Xs,Ys:string;
k:char;
begin
Driver:=Detect;
InitGraph(Driver,Mode,' ');
if GraphResult <> grOk then Halt(1);
x:=100;
y:=100;
a:=20;
repeat
SetColor(10);
Circle(x+165,y+164,30);
Rectangle(x+115,y+115,x+215,y+215);
Line(x+230,y+230,x+100,y+100);
LineTo(x+100,y+230);
LineTo(x+230,y+100);
Rectangle(x+230,y+230,x+100,y+100);
Circle(x+165,y+117,18);
Circle(x+118,y+162,18);
Circle(x+213,y+162,18);
Circle(x+167,y+212,18);
SetColor(0);
Str(x,Xs);
Str(y,Ys);
SetColor(5);
OutTextXY(300,150,'x='+Xs+':y='+Ys);
k:=ReadKey;
SetColor(0);
Circle(x+Round(165*d),y+Round(164*d),a+Round(30*d));
Rectangle(x+Round(115*d),y+Round(115*d),x+Round(215*d),y+Round(215*d));
Line(x+Round(230*d),y+Round(230*d),x+Round(100*d),y+Round(100*d));
LineTo(x+Round(100*d),y+Round(230*d));
LineTo(x+Round(230*d),y+Round(100*d));
Rectangle(x+Round(230*d),y+Round(230*d),x+Round(100*d),y+Round(100*d));
Circle(x+Round(165*d),y+Round(117*d),a+ROund(18*d));
Circle(x+Round(118*d),y+Round(162*d),a+Round(18*d));
Circle(x+Round(213*d),y+Round(162*d),a+Round(18*d));
Circle(x+167,y+212,18);
SetColor(0);
Str(x,Xs);
Str(y,Ys);
SetColor(0);
OutTextXY(300,150,'x='+Xs+':y='+Ys);
if k=#77 then x:=x+10;
if k=#75 then x:=x-10;
if k=#72 then y:=y-10;
if k=#80 then y:=y+10;
if k=#13 then a:=a+10;
if k=#8 then a:=a-10;
until k=#27;
CloseGraph;
end.
 
К сожалению, отладить программу до конца возможности у меня нет, если только завтра еще поковырять, но вообще код ОЧЕНЬ сырой, еще работать и работать. Вот лишь некоторые ошибки:
Uses Graph,CRT;
var
Driver, Mode:Integer;
x,y,a,d:integer; {Что есть d? В программе я вообще не вижу, чтобы
этому d присваивались хоть какие-то значения! Кроме того, судя по оператору Round, d должно быть числом вещественным, а у Вас оно определено, как целое. Непонятно.}

Xs,Ys:string;
k:char;
begin
Driver:=Detect;
InitGraph(Driver,Mode,' ');
if GraphResult <> grOk then Halt(1);
x:=100;
y:=100;
a:=20;
repeat
SetColor(10);
Circle(x+165,y+164,30);
Rectangle(x+115,y+115,x+215,y+215);
Line(x+230,y+230,x+100,y+100);
{Вторую диагональ тоже можно задать так же, как и первую, т.е. так:
Line(x+100,y+230,x+230,y+100);
можно и через LineTo, но в этом случае:}
LineToMoveTo
(x+100,y+230); {То же относится и к другой Вашей программе}
LineTo(x+230,y+100);
Rectangle(x+230,y+230,x+100,y+100);
Circle(x+165,y+117,18);
Circle(x+118,y+162,18);
Circle(x+213,y+162,18);
Circle(x+167,y+212,18);
SetColor(0); {В этом месте команда абсолютно бессмысленная}
Str(x,Xs);
Str(y,Ys);
SetColor(5);
OutTextXY(300,150,'x='+Xs+' y='+Ys);
k:=ReadKey;
SetColor(0);
Circle(x+Round(165*d),y+Round(164*d),a+Round(30*d));
Rectangle(x+Round(115*d),y+Round(115*d),x+Round(215*d),y+Round(215*d));
Line(x+Round(230*d),y+Round(230*d),x+Round(100*d),y+Round(100*d));
LineToMoveTo(x+Round(100*d),y+Round(230*d));
LineTo(x+Round(230*d),y+Round(100*d));
Rectangle(x+Round(230*d),y+Round(230*d),x+Round(100*d),y+Round(100*d));
Circle(x+Round(165*d),y+Round(117*d),a+ROund(18*d));
Circle(x+Round(118*d),y+Round(162*d),a+Round(18*d));
Circle(x+Round(213*d),y+Round(162*d),a+Round(18*d));
Circle(x+167,y+212,18);
SetColor(0); {см. предыдущее замечание: аналогично}
Str(x,Xs);
Str(y,Ys);
SetColor(0);
OutTextXY(300,150,'x='+Xs+' y='+Ys);
if k=#77 then x:=x+10;
if k=#75 then x:=x-10;
if k=#72 then y:=y-10;
if k=#80 then y:=y+10;
if k=#13 then a:=a+10;
if k=#8 then a:=a-10;
until k=#27;
CloseGraph;
end.

В общем, перемещение работает нормально (если a=0 и d=1), а вот с масштабными коэффициентами - разбирайтесь.
 
Назад
Сверху