![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
||||
|
||||
|
Взываю к вашей помощи Боги кодирования и новички!
В общем и целом сложных вопросов у меня нет, застопорился на мелочах в программе основой которой служит алгоритм величайшего кодера Дейкстры. Вот код: Код:
procedure TForm1.Button1Click(Sender: TObject);
var
f: textfile;
temp, i, j: integer;
tempstr: string;
begin
assignfile(f, 'Valuesmatrix.txt');
reset(f);
readln(f, temp);
GrafVal.colcount := temp;
readln(f, temp);
GrafVal.rowcount := temp;
for i := 0 to GrafVal.colcount -1 do
for j := 0 to GrafVal.rowcount -1 do
begin
readln(F, tempstr);
GrafVal.cells[i, j] := tempstr;
end;
closefile(f);
end;
Код:
procedure InitialConditions; //Начальные условия
var f: text;
i, j: integer;
begin
Assign(f, 'Valuesmatrix.txt');
Reset(f);
for i:=1 to n do
begin
for j:=1 to n do
Read(f, GrafVal[i,j])
end;
//Ввод завешён
start:=strtoint(Form2.Edit1.text);
For i:=1 to n do
Begin
done[i]:=False; //Все вершины не просмотрены
Ves_verhin[i]:=GrafVal[Start, i]; //Смотри строку #start
N_pred_versh[i]:=Start
End;
N_pred_versh[Start]:=0;
done[Start]:=True
End;
Function Possible: Boolean; //Возможность
Var i: integer;
Begin
Possible:=True;
For i:=1 to n do If not done[i] then Exit; //если вершина не рассмотрена, то possible = true
Possible:=False //если вершина рассмотрена, то possible = false
End;
Function Min: Integer; //# min вершины
Var i, MinVes, CurrentMin: integer; // текущий min
Begin
MinVes:=Infinity; //бесконечность
For i:=1 to n do
If not done[i] then //если не рассмотрена, то
If Ves_verhin[i]<MinVes then
Begin
CurrentMin:=i; //текущий min = vershina #i
MinVes:=Ves_verhin[i]
End;
min:=CurrentMin
End;
procedure TForm2.Button1Click(Sender: TObject);
begin
if Form2.Edit1.text:= 'A' then start:=GrafVal(1);
if Form2.Edit1.text:= 'B' then start:=(i[2],j[2]);
if Form2.Edit1.text:= 'C' then start:=(i[3],j[3]);
if Form2.Edit1.text:= 'D' then start:=(i[4],j[4]);
if Form2.Edit1.text:= 'E' then start:=(i[5],j[5]);
if Form2.Edit1.text:= 'F' then start:=(i[6],j[6]);
if Form2.Edit1.text:= 'G' then start:=(i[7],j[7]);
if Form2.Edit1.text:= 'H' then start:=(i[8],j[8]);
if Form2.Edit1.text:= 'I' then start:=(i[9],j[9]);
if Form2.Edit1.text:= 'J' then start:=(i[10],j[10]);
if Form2.Edit1.text:= 'K' then start:=(i[11],j[11]);
end;
Begin
InitialConditions;
While Possible do //пока вершина не рассмотрена делать:
Begin
last:=min; //LAST - последняя рассмотренная вершина
done[last]:=True; //вершина last рассмотрена
For i:=1 to n do
If Ves_verhin[i]>Ves_verhin[last]+GrafVal[i, last] then
Begin
Ves_verhin[i]:=Ves_verhin[last]+GrafVal[i, last];
N_pred_versh[i]:=last
End
End;
Finish:=strtoint(Edit2.text);
Label3.Caption:=inttostr(Finish);
Finish:=N_pred_versh[Finish];
Label7.Caption:=IntToStr(Ves_verhin[Finish]);
While Finish<>0 do
Begin
Label3.Caption:=Label3.Caption+'<-'+ inttostr(Finish);
Finish:=N_pred_versh[Finish];
End;
End;Все файлы программы прикреплены. Если кто то знает как это реализовать или же у кого то в голове есть свежие интересные идеи на этот счёт, прошу Вас подскажите. Благодарю за внимание. Последний раз редактировалось Brain Fucker, 01.04.2012 в 23:48. |
|
#2
|
||||
|
||||
|
И Вы хотите сказать, что этот код у Вас компилировался?
|
|
#3
|
||||
|
||||
|
Цитата:
|
|
#4
|
||||
|
||||
|
Не знаю, что у Вас компилировалось, но, то что находится в архиве, в принципе не может быть скомпилировано по причине массы ошибок.
Вот это никогда не пройдёт: Код:
procedure TForm2.Button1Click(Sender: TObject);
begin
if Form2.Edit1.text:= 'A' then start:=GrafVal(1);
if Form2.Edit1.text:= 'B' then start:=(i[2],j[2]);
if Form2.Edit1.text:= 'C' then start:=(i[3],j[3]);
if Form2.Edit1.text:= 'D' then start:=(i[4],j[4]);
if Form2.Edit1.text:= 'E' then start:=(i[5],j[5]);
if Form2.Edit1.text:= 'F' then start:=(i[6],j[6]);
if Form2.Edit1.text:= 'G' then start:=(i[7],j[7]);
if Form2.Edit1.text:= 'H' then start:=(i[8],j[8]);
if Form2.Edit1.text:= 'I' then start:=(i[9],j[9]);
if Form2.Edit1.text:= 'J' then start:=(i[10],j[10]);
if Form2.Edit1.text:= 'K' then start:=(i[11],j[11]);
end; |
|
#5
|
||||
|
||||
|
Цитата:
именно об этом я и говорил, именно в этом помощь мне и нужна, если удалить эту чущь - то программа компилируется =) Всё что в этом проекте собрано я обирал сам и насколько позволяют мои навыки вникал. Хочу заметить, что не ставлю своей целью кого либо обмануть или показать себя умнее чем являюсь, совершенно согласен что я полнейший нуб в программировании и именно по этому я прошу помощи. Последний раз редактировалось Brain Fucker, 02.04.2012 в 00:43. |
|
#6
|
||||
|
||||
|
Для начала, выложите архив с рабочим (собираемым) кодом, а не эту муру. Править ваши недоделки мало кому интересно.
|
|
#7
|
|||
|
|||
|
И что же Вы всё таки имели ввиду, когда писали TForm2.Button1Click?
Что там должно, по Вашему, делаться? |
| Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Brain Fucker (05.04.2012)
| ||
|
#8
|
||||
|
||||
|
Цитата:
Должен выполняться алгоритм рассчитывающий возможный и найкратчайший маршрут |