|
Главная | Правила | Регистрация | Дневники | Справка | Пользователи | Календарь | Поиск | Сообщения за день | Все разделы прочитаны |
|
Опции темы | Опции просмотра |
15.11.2012, 19:44 | #1 (permalink) |
Новичок
Регистрация: 15.11.2012
Сообщений: 2
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Паскаль, масштабирование фигуры
Код:
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. |
15.11.2012, 19:44 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Вот топики, в которых найдены совпадения с вашей темой Рассчитать объем фигуры Турбо Паскаль или Фри Паскаль. Задание по теме Типизированный файл Паскаль Паскаль |
15.11.2012, 21:17 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
К сожалению, отладить программу до конца возможности у меня нет, если только завтра еще поковырять, но вообще код ОЧЕНЬ сырой, еще работать и работать. Вот лишь некоторые ошибки:
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), а вот с масштабными коэффициентами - разбирайтесь. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
Опции темы | |
Опции просмотра | |
|
|