Второй этап моделирования. Реализация машинной модели

 

На втором этапе математическая модель воплощается в машинную модель, т.е. решается проблема алгоритмизации модели, ее рационального разбиения на блоки и организации интерфейса между ними. Реализация алгоритма представлена на языке турбо паскаль.

 

Блок схема

 

Основная схема

 




 




Листинг программы

 

program u; uses crt; label m1,m2,m3; const n=5; type uk=^zap; zap=record s:integer; zn:boolean; Lln:uk; Rln:uk; end; var zn:char; perv,tek,pred,perv1:uk; met:boolean; i,nash,kon,znash,dl:integer;   Блок описаний: Задание названия программы, задание существующих меток, констант (n=5) – задание точного числа остановок на пути, задание типов переменных: целочисленных данных, логических переменных, логические метки, символьные переменные.  

 

procedure poisk1; begin tek:=perv1; znash:=0; while tek^.zn=false do begin znash:=tek^.s+znash; tek:=tek^.rln; end; writeln(' '); znash:=znash+dl; end; Процедура поиска и задания начальной координаты, и нахождения суммарного пути по часовой стрелке.

 

procedure poisk2; var cx:integer; begin tek:=perv1; znash:=0; cx:=0; tek:=perv1; while tek^.zn=false do begin cx:=cx+1; znash:=tek^.lln^.s+znash; tek:=tek^.lln; end; znash:=znash+dl; end; Процедура поиска и задания начальной координаты, и нахождения суммарного пути против часовой стрелки.

 

begin clrscr; m1:writeln('Vvedite nomer nashalnoi koordinati');readln(nash); if nash>n then begin writeln('Nevernii vvod'); goto m1; end; m2:writeln('Vvedite nomer koneshnoi koordinati');readln(kon); if kon>n then begin writeln('Nevernii vvod'); goto m2; end; writeln('Vvedite put do tupika');readln(dl); Вводим начальные координаты   Если начальная координата больше общего числа возможных остановок на пути, выводится ошибка.     Ввод конечной координаты   Если конечная координата больше общего числа возможных остановок на пути, выводится ошибка.     Ввод расстояния до тупика

 

new(tek); perv:=tek; if kon=1 then perv^.zn:=true else perv^.zn:=false; writeln('Vvedite put 1');readln(tek^.s); tek^.Rln:=nil; tek^.Lln:=nil; pred:=perv; perv1:=perv; for i:=2 to n do begin new(tek); pred^.Rln:=tek; tek^.lln:=pred; writeln('Vvedite put ',i);readln(tek^.s); tek^.Rln:=nil; pred:=tek; if i=nash then perv1:=tek; if i=kon then tek^.zn:=true else tek^.zn:=false; end; tek^.Rln:=perv; perv^.Lln:=tek; Здесь задается вопрос о величине каждой в отдельности ветви.     Задание величины длины пути до тупика при переходе по стрелке

 

m3:writeln('Vvedite napravlenie:'); writeln(' Y- Po shasovoi strelke'); writeln(' N- Protiv shasovoi strelki'); zn:=readkey; case zn of 'Y','y':poisk1; 'N','n':poisk2; else begin writeln('Nevernii vvod,povtorite ese ras'); goto m3; end; end; writeln('Proidennii put: ',znash); readkey; end. Вводится направления движения которое считается более оптимальным, то есть задается движение поезда по часовой стрелки или против часовой. Y-по часовой X-против часовой При ошибки ввода неправильного значения выдается просьба ввода еще раз.   Вывод длины пройденного пути

 

(Рис.2)

 

Это результат работы программы, в которой рассмотрена задача нахождения пути, переключение направления движения, а также работа стрелки.

 




Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: