как исправить в паскале System.IO.FileNotFoundException: Файл 'C:\PABCWork.NET\graph.lin' не найден
Когда я запускаю следующий код:
program pr8_3; {пошук ушир }
uses crt;
type
PtrVer = ^TVer; {тип покажчика на вершину графу }
TVer = record {тип вершини графу }
vertex:array[1..50]of PtrVer;{масив суміжних вершин}
k, {кількість суміжних вершин }
number:integer; {номер вершини }
mark: boolean; {ознака відвідування вершини }
end;
PElem = ^TElem; {тип покажчика на елемент черги }
TElem = record {тип елемента черги }
PVer: PtrVer; {покажчик на поточну вершину}
PFrom : PElem; {покажчик на попередню вершину }
Prev, {покажчик на попередній елемент черги }
Next:PElem; {покажчик на наступний елемент черги }
end;
var PBeg,PEnd, {покажчики на початок і кінець черги }
PCur:PElem; {покажчик на поточний елемент черги }
t:text; {текстовий файл зі списком суміжності }
key:char; {символ вибраної користувачем дії }
start, {номер початкової вершини обходу графу}
finish:integer; {номер кінцевої вершини обходу }
a:array[1..50] of PtrVer; {масив покажчиків на вершини
графу}
n: integer; {кількість вершин графу }
{======= встановлення зв'язків між вершинами графу ====}
procedure LinkVertex(var v,u:PtrVer);
{v,u - покажчики на вершини, що зв'язуються}
begin
{включити u в список суміжності v}
inc(v^.k);
v^.vertex[v^.k]:=u;
{включити v у список суміжності u}
inc(u^.k);
u^.vertex[u^.k]:=v;
end;
{----- ініціалізація графу з файла ------}
procedure Init;
var i, {параметр циклу }
iv,iu:integer; {номери суміжних вершин }
Ver:PtrVer; {покажчик на вершину графу }
begin
reset(t); {відкрити файл списку суміжних вершин}
readln(t,n); {зчитати кількість вершин графу }
for i:=1 to n do {створити масив покажчиків на }
begin {вершини графу }
new(Ver); {виділити пам'ять для покажчика }
Ver^.number:=i; {визначити номер вершини }
Ver^.k:=0; {задати кількість суміжних вершин }
a[i]:=Ver; {записати покажчик на вершину в масив}
end;
while not eof(t) do {поки не досягнуто кінця файла }
begin readln(t, iv, iu); {читати номери суміжних вершин }
LinkVertex(a[iv], a[iu]); {зв'язати вершини }
end;
close(t); {закрити файл }
end;
{======= Додавання елемента до черги ========}
procedure AddList(v:PtrVer; q:PElem); {v - покажчик на вершину, що
додається до черги: q - покажчик на попередній елемент черги}
var p:PElem; {поточний покажчик }
begin
new(p); {виділити пам'ять для елемента черги}
p^.PVer:=v; {покажчик на поточну вершину }
p^.PFrom:=q; {покажчик на попередню суміжну вершину }
p^.Prev:=PEnd^.Prev; {3в'язати поточний елемент }
p^.Next:=PEnd; {із кінцевим у черзі }
PEnd^.Prev^.Next:=p;
PEnd^.Prev:=p;
end;
{======== видалення елемента з черги ======= }
procedure DelList(e:pElem);
{параметр - покажчик на елемент, що видаляється}
var p: PElem;
begin
if e = nil then exit; {якщо елемент порожній, вийти з програми
}
e^.Next^.Prev:=e^.Prev; {переадресувати покажчики }
e^. Prev^. Next:=e^. Next;
dispose(e); {звільнити пам'ять з-під елемента}
end;
{======== виведення поточного елемента черги ====}
procedure Output(e:pElem);
begin
if e = nil then exit; {якщо елемент порожній. вийти з програми }
output(e^.PFrom); {вивести решту черги }
if e^.PVer^.number <> finish
then {елемент не }
write(e^.PVer^.number, ' -> ') {останній }
else write(e^.PVer^.number, ' '); {елемент останній}
end;
{========== видалення черги =========}
procedure Clear;
var PCurrent, PDel:PElem;
begin PCurrent:=PBeg^.Next;
while PCurrent <> PEnd do {поки не досягнуто }
begin {кінця черги }
PDel:=PCurrent; {покажчик на елемент, що видаляється}
PCurrent:=PCurrent^.Next;{переадресувати покажчик на наступний
елемент}
DelList(PDel); {видалити елемент }
end; end;
{========= пошук ушир ============>======}
procedure BreadthFirstSearch; var i:integer; {параметр циклу}
begin
clrscr;
writeln('<<<< Перший пошук вшир>>>>');
writeln('********************');
write('початкова вершина : ');
readln(start);
write('термінальна вершина : ');
readln(finish);
AddList(a[start], nil); {додати в чергу вершину}
for i:=1 to n do {задати ознаки відвідування}
a[i]^.mark:=false; {вершин графу }
PCur:=PBeg^.Next; {вибрати початок черги }
while PCur <> PEnd do {поки не досягнуто кінця черги}
begin
PCur^.PVer^.mark:=true; {відмітити вершину графу }
if PCur^.PVer^.number = finish then begin {якщо вершина
остання в черзі, то}
write(' Path : >> ');
output(pCur); {вивести чергу}
clear; {очистити чергу}
readln;
exit; {вийти з циклу}
end;
{якщо вершина графу не остання}
for i:=1 to PCur^.PVer^.k do
begin {якщо вершина не відмічена}
if not PCur^. PVer^.vertex[i]^.mark then
{додати вершину до черги }
AddList(PCur^.PVer^.vertex[i],PCur); end;
PCur:=PCur^.Next; {перейти до наступної вершини}
end;
writeln('<<< Шлях не знайдено >>>');
readln;
clear; {очистити чергу}
end;
{=-======= основний блок програми =====' }
begin
assign(t,'graph.lin');
new(PBeg);
new(PEnd);
PBeg^.Prev:=nil;
PBeg^.Next:=PEnd;
PEnd^.Prev:=PBeg;
PEnd^.Next:=nil;
init;
repeat
clrscr;
writeln('Число вершин = ', n);
writeln('**********************************');
writeln('Натисніть <Enter> для рішення ');
writeln('<Esc> - для виходу');
key:=readkey;
case key of
#13 : BreadthFirstSearch;{натиснуто клавішу Enter}
#27 : halt; {натиснуто клавішу Esc }
end;
until false;
end.
Я получаю следующую ошибку:
Unhandled Exception: System.IO.FileNotFoundException: Файл 'C:\PABCWork.NET\graph.lin' не найден.
Когда я запускаю следующий код:
program pr8_3; {пошук ушир }
uses crt;
type
PtrVer = ^TVer; {тип покажчика на вершину графу }
TVer = record {тип вершини графу }
vertex:array[1..50]of PtrVer;{масив суміжних вершин}
k, {кількість суміжних вершин }
number:integer; {номер вершини }
mark: boolean; {ознака відвідування вершини }
end;
PElem = ^TElem; {тип покажчика на елемент черги }
TElem = record {тип елемента черги }
PVer: PtrVer; {покажчик на поточну вершину}
PFrom : PElem; {покажчик на попередню вершину }
Prev, {покажчик на попередній елемент черги }
Next:PElem; {покажчик на наступний елемент черги }
end;
var PBeg,PEnd, {покажчики на початок і кінець черги }
PCur:PElem; {покажчик на поточний елемент черги }
t:text; {текстовий файл зі списком суміжності }
key:char; {символ вибраної користувачем дії }
start, {номер початкової вершини обходу графу}
finish:integer; {номер кінцевої вершини обходу }
a:array[1..50] of PtrVer; {масив покажчиків на вершини
графу}
n: integer; {кількість вершин графу }
{======= встановлення зв'язків між вершинами графу ====}
procedure LinkVertex(var v,u:PtrVer);
{v,u - покажчики на вершини, що зв'язуються}
begin
{включити u в список суміжності v}
inc(v^.k);
v^.vertex[v^.k]:=u;
{включити v у список суміжності u}
inc(u^.k);
u^.vertex[u^.k]:=v;
end;
{----- ініціалізація графу з файла ------}
procedure Init;
var i, {параметр циклу }
iv,iu:integer; {номери суміжних вершин }
Ver:PtrVer; {покажчик на вершину графу }
begin
reset(t); {відкрити файл списку суміжних вершин}
readln(t,n); {зчитати кількість вершин графу }
for i:=1 to n do {створити масив покажчиків на }
begin {вершини графу }
new(Ver); {виділити пам'ять для покажчика }
Ver^.number:=i; {визначити номер вершини }
Ver^.k:=0; {задати кількість суміжних вершин }
a[i]:=Ver; {записати покажчик на вершину в масив}
end;
while not eof(t) do {поки не досягнуто кінця файла }
begin readln(t, iv, iu); {читати номери суміжних вершин }
LinkVertex(a[iv], a[iu]); {зв'язати вершини }
end;
close(t); {закрити файл }
end;
{======= Додавання елемента до черги ========}
procedure AddList(v:PtrVer; q:PElem); {v - покажчик на вершину, що
додається до черги: q - покажчик на попередній елемент черги}
var p:PElem; {поточний покажчик }
begin
new(p); {виділити пам'ять для елемента черги}
p^.PVer:=v; {покажчик на поточну вершину }
p^.PFrom:=q; {покажчик на попередню суміжну вершину }
p^.Prev:=PEnd^.Prev; {3в'язати поточний елемент }
p^.Next:=PEnd; {із кінцевим у черзі }
PEnd^.Prev^.Next:=p;
PEnd^.Prev:=p;
end;
{======== видалення елемента з черги ======= }
procedure DelList(e:pElem);
{параметр - покажчик на елемент, що видаляється}
var p: PElem;
begin
if e = nil then exit; {якщо елемент порожній, вийти з програми
}
e^.Next^.Prev:=e^.Prev; {переадресувати покажчики }
e^. Prev^. Next:=e^. Next;
dispose(e); {звільнити пам'ять з-під елемента}
end;
{======== виведення поточного елемента черги ====}
procedure Output(e:pElem);
begin
if e = nil then exit; {якщо елемент порожній. вийти з програми }
output(e^.PFrom); {вивести решту черги }
if e^.PVer^.number <> finish
then {елемент не }
write(e^.PVer^.number, ' -> ') {останній }
else write(e^.PVer^.number, ' '); {елемент останній}
end;
{========== видалення черги =========}
procedure Clear;
var PCurrent, PDel:PElem;
begin PCurrent:=PBeg^.Next;
while PCurrent <> PEnd do {поки не досягнуто }
begin {кінця черги }
PDel:=PCurrent; {покажчик на елемент, що видаляється}
PCurrent:=PCurrent^.Next;{переадресувати покажчик на наступний
елемент}
DelList(PDel); {видалити елемент }
end; end;
{========= пошук ушир ============>======}
procedure BreadthFirstSearch; var i:integer; {параметр циклу}
begin
clrscr;
writeln('<<<< Перший пошук вшир>>>>');
writeln('********************');
write('початкова вершина : ');
readln(start);
write('термінальна вершина : ');
readln(finish);
AddList(a[start], nil); {додати в чергу вершину}
for i:=1 to n do {задати ознаки відвідування}
a[i]^.mark:=false; {вершин графу }
PCur:=PBeg^.Next; {вибрати початок черги }
while PCur <> PEnd do {поки не досягнуто кінця черги}
begin
PCur^.PVer^.mark:=true; {відмітити вершину графу }
if PCur^.PVer^.number = finish then begin {якщо вершина
остання в черзі, то}
write(' Path : >> ');
output(pCur); {вивести чергу}
clear; {очистити чергу}
readln;
exit; {вийти з циклу}
end;
{якщо вершина графу не остання}
for i:=1 to PCur^.PVer^.k do
begin {якщо вершина не відмічена}
if not PCur^. PVer^.vertex[i]^.mark then
{додати вершину до черги }
AddList(PCur^.PVer^.vertex[i],PCur); end;
PCur:=PCur^.Next; {перейти до наступної вершини}
end;
writeln('<<< Шлях не знайдено >>>');
readln;
clear; {очистити чергу}
end;
{=-======= основний блок програми =====' }
begin
assign(t,'graph.lin');
new(PBeg);
new(PEnd);
PBeg^.Prev:=nil;
PBeg^.Next:=PEnd;
PEnd^.Prev:=PBeg;
PEnd^.Next:=nil;
init;
repeat
clrscr;
writeln('Число вершин = ', n);
writeln('**********************************');
writeln('Натисніть <Enter> для рішення ');
writeln('<Esc> - для виходу');
key:=readkey;
case key of
#13 : BreadthFirstSearch;{натиснуто клавішу Enter}
#27 : halt; {натиснуто клавішу Esc }
end;
until false;
end.
Я получаю следующую ошибку:
Unhandled Exception: System.IO.FileNotFoundException: Файл 'C:\PABCWork.NET\graph.lin' не найден.
В коде есть ссылка на файл, но этого файла нет ни в PascalABCNet, ни в TurboPascal. Я не знаю, как это исправить. Такого файла нет ни в интернете, ни где-либо еще. Помогите, пожалуйста.