- •Курсовая работа
- •Пояснительная записка
- •Аннотация
- •Введение
- •1 Постановка задачи и сфера её применения
- •2 Теоретическая часть
- •2.2 Алгоритм Дейкстры
- •3 Особенности работы в среде
- •4 Диаграммы насси-шнейдермана
- •5 Программная реализация
- •6 Инструкция пользователя
- •Заключение
- •Литература
- •Приложение а
- •Приложение б
- •Приложение в
6 Инструкция пользователя
При запуске программы на экране появится окно с инструкциями. Выполняйте эти инструкции, а именно:
Введите номер начальной вершины.
Введите номер конечной вершины. На экран выводится матрица смежности, прочтенная из текстового файла
Чтоб завершить работу программы после получения результата нажмите Enter.
Заключение
Таким образом, в процессе создания данного проекта разработана программа, реализующая алгоритм Дейкстры в Turbo Pascal. Её недостатком является примитивный пользовательский интерфейс. Это связано с тем, что программа работает в консольном режиме, не добавляющем к сложности языка сложность программного оконного интерфейса
Также были углублены знания, полученные в процессе выполнения лабораторных работ по предмету «Программирование».
Литература
1. Е. А. Зуев. Программирование на языке Turbo Pascal 6.0, 7.0, М.:Веста,Радио и связь, 1993, — С.376
2. Кассера В. Ф. Turbo Pascal 7.0, Диасофт, 2003
3. Эллиот Б. Коффман. Turbo Pascal = Turbo Pascal Web Update — М.: Вильямс, 2005. — С. 896.
4.Моргун Александр Николаевич. Справочник по Turbo Pascal для студентов — М.: Диалектика, 2006. — С. 608
5. Нэйл Рубенкинг. Turbo Pascal для Windows = Turbo Pascal for Windows. Techniques and Utilites — М.: Мир, 1993. — С. 535.
6. Фаронов В. В. Turbo Pascal. Наиболее полное руководство. BHV-Санкт-Петербург, 2007
Приложение а
Текст программы
Program Alg_dejkstr;
Uses Crt;
Const MaxSize=8;
n=8;
Infinity=1000;
Var D: array [1..MaxSize, 1..MaxSize] of integer;
A: array [1..MaxSize] of boolean;
B,C: array [1..MaxSize] of integer;
Start, Finish, k, i: integer;
Procedure Init;
Var f: text;
i, j: integer;
Begin
Assign(f, 'INPUT.MTR');
Reset(f);
For i:=1 to n do
Begin
For j:=1 to n do
Read(f, D[i,j])
End;
For i:=1 to n do
begin
For j:=1 to n do
write(d[i,j]);
writeln
end;
Write('начальная вершина: '); Readln(Start);
For i:=1 to n do
Begin
A[i]:=False;
B[i]:=D[Start, i];
C[i]:=Start
End;
C[Start]:=0;
A[Start]:=True
End;
Function Possible: Boolean;
Var i: integer;
Begin
Possible:=True;
For i:=1 to n do If not A[i] then Exit;
Possible:=False
End;
Function Min: Integer;
Var i, minvalue, currentmin: integer;
Begin
Minvalue:=Infinity;
For i:=1 to n do
If not A[i] then
If B[i]<minvalue then
Begin
currentmin:=i;
minvalue:=B[i]
End;
min:=currentmin
End;
Begin
ClrScr;
Init;
While Possible do
Begin
k:=min;
A[k]:=True;
For i:=1 to n do
If B[i]>B[k]+D[i, k] then
Begin
B[i]:=B[k]+D[i, k];
C[i]:=k
End
End;
Write('конечная вершина: '); Readln(Finish);
Write(Finish);
Finish:=C[Finish];
While Finish<>0 do
Begin
Write('<-', Finish);
Finish:=C[Finish];
End;
ReadKey
End.
Массив расстояний, прочитанный из текстового файла имеет вид:
0 23 12 1000 1000 1000 1000 1000
23 0 25 1000 22 1000 1000 35
12 25 0 18 1000 1000 1000 1000
1000 1000 18 0 1000 20 1000 1000
1000 22 1000 1000 0 23 14 1000
1000 1000 1000 20 2 3 0 24 1000
1000 1000 1000 1000 14 24 0 16
1000 35 1000 1000 1000 1000 16 0