〖问题描述〗本题利用PASCAL的绘图功能,在屏幕上中心位置画一个3到9条边的正多边形。
〖题目要求〗把程序中的几个空位补充完整,使其能在屏幕上画出所要的正多边形,并上机调试,最后把调试完的程序文件以自己的名字命名,
〖程序说明〗本程序利用PASCAL中的CRT和GRAPH两个单元来实现绘图,在程序中用到单元中所提供的相关过程,如:InitGraph(图形初始化),CloseGraph(关闭图形),Line(绘制直线),SetTextStyle(设置输出文本的样式),OutTextXY(在屏幕的相应位置上输出指定文本)。还用到相关的函数,如:round(四舍五入),sin(正弦),cos(余弦)。
〖注意〗在进入PASCAL环境中时,首先应在options菜单中的directories里进行”exe & tpu directory”和”unit directories”,前者输入”c:\tp\bin”,后者输入”c:\tp\units”。
〖程序如下〗
program pic;
uses Crt, Graph;{调用屏幕字符和图形处理单元}
var
Gd,Gm:Integer;
n:integer;
x,y,x1,x2,y1,y2,i:integer;
dx,dy:array[0..9] of integer;
procedure panduan;
begin
if dx[i mod n]>dx[(i+1) mod n] then
begin
  x1:=dx[(i+1) mod n];y1:=dy[(i+1) mod n];
  x2:=dx[i mod n];y2:=dy[i mod n];
end
else
begin
  x1:=dx[i mod n];y1:=dy[i mod n];
  x2:=dx[(i+1) mod n];y2:=dy[(i+1) mod n];
end;
end;
procedure draw;
begin
if x1<>x2 then
for x:=x1+1 to x2 do
begin
  y:=④;
  line(x,y,x,y);
end
else
begin
  x:=x1;
  if y1>y2 then
  begin
   y:=y2;y2:=y1;y1:=y;
  end;
  for y:=y1+1 to y2 do
  begin
   line(x,y,x,y);
  end;
end;
end;
begin
clrscr;{清屏}
write('please input the number n(3~9):');readln(n);
Gd := Detect;
InitGraph(Gd, Gm, 'c:\tp\bgi\');{图形模式初始化}
if GraphResult <> grOk then Halt(1);{初始化失败,则程序中断}
x:=getmaxx div 2;y:=getmaxy div 2;
SetTextStyle(DefaultFont, HorizDir,5);{设置文本输出样式}
OutTextXY(x-10,50,chr(n+48));{在屏幕上相应的位置上输出所要的文本}
for i:=0 to n do
begin
  dx[i]:=round(100*sin(i*360/n/180*pi+pi))+x;
  dy[i]:=round(100*cos(i*360/n/180*pi+pi))+y;
end;
i:=0;
repeat
  if i>=n then break;
  ①;
  ②;
  ③;
until keypressed;
readln;
CloseGraph;
end.