Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Помощь студентам


Ответ
 
Опции темы Опции просмотра
Старый 15.11.2012, 19:44   #1 (permalink)
Алекс375
Новичок
 
Регистрация: 15.11.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
По умолчанию Паскаль, масштабирование фигуры

вот код программы моей, что неверно? что то в конце нужно добавить или как. фигура должна увеличиваться с нажатием клавиши 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.
Алекс375 вне форума   Ответить с цитированием

Старый 15.11.2012, 19:44
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Вот топики, в которых найдены совпадения с вашей темой

Рассчитать объем фигуры
Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл
Паскаль
Паскаль

Старый 15.11.2012, 21:17   #2 (permalink)
Vladimir_S
Специалист
 
Аватар для Vladimir_S
 
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 26,358
Сказал(а) спасибо: 289
Поблагодарили 507 раз(а) в 165 сообщениях
Репутация: 91953
По умолчанию

К сожалению, отладить программу до конца возможности у меня нет, если только завтра еще поковырять, но вообще код ОЧЕНЬ сырой, еще работать и работать. Вот лишь некоторые ошибки:
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(21 5*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(10 0*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), а вот с масштабными коэффициентами - разбирайтесь.
__________________
With Mozilla Firefox - straight to communism!
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 09:10.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.