Трассировка печатной платы
Министерство народного образования Российской Федерации
КиГИТ
Кафедра информатики
вычислительной техники
Курсовая работа
По курсу « Программирования ВТ и АС »
На тему: «Трассировка печатной платы»
Разработал: студент группы ДПО-42 Кудрявцев К.В.
Принял: к.т.н., доцент кафедры ВТ Гафаров Р.М.
Ижевск 2005
Текст программы
Р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) 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. Волна работает по такому принципу: Когда вы ставите первую точку то с этого места экран начнет заполняться числами Волна начинает расходиться рис.2 с 1 и до 0 т. е. место которое вы отметили первой точкой на волне будет отмечено единицей «1», вокруг нее появляются двойки, вокруг двоек тройки рис.1 и т.д. до нуля, после нуля все начинается с 1 см.рис 2. Как только волна достигнет второй точки см. рис.1 распространение прекращается и начинает проводиться линия между точками(линии не могут пересекаться потому что после того как линия будет создана место где она находится будет отмечено отрицательными числами, а при распространении волны экран заполняется положительными числами т.е. линия может пройти только по положительным числам). Прежде чем пройдет трасса от одной точки до другой сначала пройдет волна и если нет мест отмеченных отрицательными числами - (уже проведенные лини или что-то нарисовано), трасса пройдет напрямую ко второй точке, а если есть места отмеченные отрицательными числами, то трасса идет напрямую ко второй точке, огибает преграду и доходит до второй точки не пересёкшись с другой линией. Выбор места установки контактов (первой и второй точек) производится пользователем при помощи курсора. Принцип работы процедуры управления курсором заключается в том, что экран имеет размеры 80x25 верхний левый угол имеет координаты - (1,1), правый нижний - (80,25) и если при движении курсора по оси Х курсор доходит конца экрана (например - 80), т.к. курсор не может переходить дальше координаты (80), то он автоматически становится на начальную позицию см. рис. 3. То же самое происходит с курсором при его движении рис.3 по оси У. Вывод Полученный мною практический опыт применительно к программированию на ПАСКАЛЕ позволяет использовать эффективное модульное программирование. Кроме того, изучив представленный в курсовом проектировании материал, я приобрел практические навыки использования процедур, функций. Эта курсовая для меня была интересна и увлекательна потому, что с таким заданием я столкнулся впервые. Раньше я сам занимался радио – электроникой и думаю раньше, мне бы эта программа пригодилась. Алгоритм программы Введение Язык программирования Pascal был разработан в 1968—1971 гг. Никлаусом Виртом в Цюрихском Институте информатики (Швейцария). Первоначальная цель разработки языка диктовалась необходимостью инструмента "для обучения программированию как систематической дисциплине". Однако очень скоро обнаружилась чрезвычайная эффективность языка Pascal в самых разнообразных приложениях, от решения небольших задач численного характера до разработки сложных программных систем — компиляторов, баз данных, операционных систем и т.п. К настоящему времени Pascal принадлежит к группе наиболее распространенных и популярных в мире языков программирования. Существуют многочисленные реализации языка практически для всех машинных архитектур; разработаны десятки диалектов и проблемно-ориентированных расширений языка Pascal; обучение программированию и научно-технические публикации в значительной степени базируются на этом языке. Характеристика и особенности языка. Существует ряд объективных причин, обусловивших выдающийся успех языка Pascal. Среди них в первую очередь необходимо указать следующие: 1. Язык в естественной и элегантной форме отразил важнейшие современные концепции технологии разработки программ: развитая система типов, ориентация на принципы структурного программирования, поддержка процесса пошаговой разработки. 2. Благодаря своей компактности, концептуальной целостности и ортогональности понятий, а также удачному первоначальному описанию, предложенному автором языка, Pascal оказался весьма легок для изучения и освоения. В противоположность громоздким многотомным описаниям таких языков, как PL/I, Cobol, FORTRAN, достаточно полное описание языка Pascal занимает около 30 страниц текста, а его синтаксические правила можно разместить на одной странице. 3. Несмотря на относительную простоту языка, он оказался пригоден для весьма широкого спектра приложений, в том числе для разработки очень больших и сложных программ, например операционных систем. 4. Pascal весьма технологичен для реализации практически для всех, в том числе и нетрадиционных, машинных архитектур. Утверждается, что разработка Pascal-транслятора "почти не превышает по трудоемкости хорошую дипломную работу выпускника вуза". Благодаря этому для многих ЭВМ существует несколько различных реализации языка, отражающих те или иные практические потребности программистов. Язык Pascal стандартизован во многих странах. В 1983 году был принят международный стандарт (ISO 7185:1983). Готовится (сведения на 1989 год) стандарт СЭВ на Pascal. Содержание Введение………………………………………………………………….3 Задание........................................................................................................4 Цель работы………………………………………………………………4 Постановка задачи………………………………………………………..4 Анализ и разработка алгоритма………………………………………….5 Алгоритм программы……………………………………………………..6 Текст программы ………………………………………………………....7 Результаты моделирование программы на реальной ЭВМ…………….9 Вывод………………………………………………………………………10