Студентам > Курсовые > Трассировка печатной платы
Трассировка печатной платыСтраница: 1/2
Текст программы
Рrogram plata; {Находит кротчайший путь от одной точки до другой}
uses crt; {не пересекая уже проведенные линии}
const Xm=80;Ym=24; c:word=14;
d:array[0 3]of record x,y:integer end=
((x:-1;y:0),(x:0;y:-1),(x:1;y:0),(x:0;y:1));
str='* - draw; del - clear; 1,2 - contact pointers;';
type plt=array[1 Ym,1 Xm] of integer;
var Pl:plt; ch:char; x1,y1,x2,y2,s:integer; p1:boolean;
{-----------------------------------------------------------------------------------------------------------------}
procedure InitPlata; {Создает фон экрана}
var x,y:integer;
begin TextBackGround(0);TextColor(7);
for y:=1 to Ym do for x:=1 to Xm do begin Pl[y,x]:=0; write('.'); end;
end;
{-----------------------------------------------------------------------------------------------------------------}
procedure ClrPlata; {Восстанавливает экран в прежний вид после прохождения}
var x,y:integer; {волны оставляя проведенные линии}
begin TextBackGround(0);TextColor(7);
for y:=1 to Ym do for x:=1 to Xm do
if Pl[y,x]>0 then begin Pl[y,x]:=0; GotoXY(x,y); write('.'); end;
end;
{----------------------------------------------------------------------------------------------------------------}
procedure Trassa(xn,yn,xk,yk:integer); {Эта процедура находит кротчайший }
var xt,yt,x1,y1,min,xp,yp,p:integer; {путь от одной точки до другой}
begin xt:=xk; yt:=yk; Pl[yt,xt]:=-1;
repeat min:=maxint;
for p:=0 to 3 do
begin x1:=xt+d[p].x; y1:=yt+d[p].y; Sound(p*abs((xk-x1)*(yk-y1)));
if(x1>0)and(x1<=Xm)and(y1>0)and(y1<=Ym)and(Pl[y1,x1]>0)and(Pl[y1,x1]<min)
then begin min:=Pl[y1,x1]; xp:=x1; yp:=y1; end;
end;
xt:=xp; yt:=yp; Pl[yt,xt]:=-1; TextColor(9+c mod 6);
GotoXY(xt,yt); write(#219); Delay(130);
until (xt=xn)and(yt=yn);
TextColor(12); GotoXY(xn,yn); write(#219); GotoXY(xk,yk); write(#219);
NormVideo; ClrPlata; inc(c); NoSound;
end;
{---------------------------------------------------------------------------------------------------------------}
procedure volna(xn,yn,xk,yk:integer; var s:integer); {Процедура прохождения волны}
var A:array [1 600] of record x,y:integer; end;
i,p,k,l,xt,yt,x1,y1,ia,ib,f:integer;
begin f:=2; Pl[yn,xn]:=1; A[1].x:=xn; A[1].y:=yn; ib:=300; ia:=1; k:=1;
repeat l:=0; {Sound(l*170);}
for i:=ia to ia+k-1 do
begin xt:=A[i].x; yt:=A[i].y; Sound(i*70);
for p:=0 to 3 do
begin x1:=xt+d[p].x; y1:=yt+d[p].y; Sound(p*k*7);
if(x1>0)and(x1<=Xm)and(y1>0)and(y1<=Ym)and(Pl[y1,x1]=0) then
begin A[ib+l].x:=x1; A[ib+l].y:=y1; inc(l); TextColor(9+f mod 6);
Pl[y1,x1]:=f; GotoXY(x1,y1); write((f mod 10):1);
if(x1=xk)and(y1=yk)then begin NoSound;s:=0; exit;end; Delay(13);
end;
end;
end;
i:=ia; ia:=ib; ib:=i; k:=l; inc(f);
until l=0; NoSound;
s:=1; GotoXY(20,25); TextColor(12); write(‘ Трасса не может быть проведена!!!’);
Delay(3000); GotoXY(xk,yk); TextColor(7); write('.'); GotoXY(20,25);
write(str); ClrPlata;
end;
{----------------------------------------------------------------------------------------------------------------}
begin
ClrScr; InitPlata; GotoXY(20,25); write(str); GotoXY(40,12); p1:=false;
repeat
ch:=ReadKey; if ch=#0 then ch:=ReadKey;
case ch of
{up} #72: if WhereY=1 then GotoXY(WhereX,24) else GotoXY(WhereX,WhereY-1);
{left} #75: if WhereX=1 then GotoXY(80,WhereY) else GotoXY(WhereX-1,WhereY);
{right}#77: GotoXY((WhereX+1) mod 80+(WhereX+1) div 80 ,WhereY);
{down} #80: GotoXY(WhereX,(WhereY+1) mod 25+(WhereY+1) div 25);
{*} #56: begin Pl[WhereY,WhereX]:=-1; TextColor(10);write(#176); GotoXY(Where X-1,Where Y);
{del} #83: begin Pl[WhereY,WhereX]:=0; write('.'); GotoXY(WhereX-1,WhereY);end;
{1} #49: if(not p1)and(Pl[WhereY,WhereX]=0)
then begin x1:=WhereX; y1:=WhereY; p1:=true;
TextBackGround(14);TextColor(12);write(#176); NormVideo; end;
{2} #50: if p1 and(Pl[WhereY,WhereX]=0)
then begin x2:=WhereX; y2:=WhereY; p1:=false;
TextBackGround(14);TextColor(12);write(#176); NormVideo;
Volna(x1,y1,x2,y2,s);
if s=0 then trassa(x1,y1,x2,y2); end;
end;
until ch=#27;
NormVideo;
END.
Результаты моделирования программы на реальной ЭВМ
Задание
Составить программу трассировки платы (программа, которая соединяет две точки линией кротчайшим путем, не пересекаясь и обходя все препятствия).
Цель работы Целью курсового проектирования является приобретение и закрепление навыков в организации вычислительных процессов и программирования на алгоритмическом языке ПАСКАЛЬ. Основной акцент в работе уделяется рассмотрению модульного программирования, использованию процедур и функций. Полученные знания помогут в будущем более эффективно подходить к процессу разработки программного обеспечения. Постановка задачи
В данной курсовой работе будет осуществляться соединение двух точек кротчайшим путем, не пересекая друг друга. Сначала пользователь при помощи курсора должен поставить первую точку, затем вторую и программа соединит эти точки. Для наибольшей наглядности волна при прохождении раскрашивается разными цветами, а также раскрашивается проведенная линия.
Анализ и разработка алгоритма
Эта программа работает на принципе волны
которая начинает распространяться от первой
точки заполняя экран числами от 0 до 9 пока
не достигнет второй точки см. рис.1.
Волна работает по такому принципу:
Когда вы ставите первую точку
|