![]() |
|
|
Регистрация | << Правила форума >> | 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; Все файлы программы прикреплены. Если кто то знает как это реализовать или же у кого то в голове есть свежие интересные идеи на этот счёт, прошу Вас подскажите. Благодарю за внимание. If you're afraid to fail - you'll keep failing forever. Последний раз редактировалось Brain Fucker, 01.04.2012 в 23:48. |
#2
|
||||
|
||||
![]() И Вы хотите сказать, что этот код у Вас компилировался?
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#3
|
||||
|
||||
![]() Цитата:
If you're afraid to fail - you'll keep failing forever. |
#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; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#5
|
||||
|
||||
![]() Цитата:
именно об этом я и говорил, именно в этом помощь мне и нужна, если удалить эту чущь - то программа компилируется =) Всё что в этом проекте собрано я обирал сам и насколько позволяют мои навыки вникал. Хочу заметить, что не ставлю своей целью кого либо обмануть или показать себя умнее чем являюсь, совершенно согласен что я полнейший нуб в программировании и именно по этому я прошу помощи. If you're afraid to fail - you'll keep failing forever. Последний раз редактировалось Brain Fucker, 02.04.2012 в 00:43. |
#6
|
||||
|
||||
![]() Для начала, выложите архив с рабочим (собираемым) кодом, а не эту муру. Править ваши недоделки мало кому интересно.
Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#7
|
|||
|
|||
![]() И что же Вы всё таки имели ввиду, когда писали TForm2.Button1Click?
Что там должно, по Вашему, делаться? |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
Brain Fucker (05.04.2012)
|
#8
|
||||
|
||||
![]() Цитата:
Должен выполняться алгоритм рассчитывающий возможный и найкратчайший маршрут If you're afraid to fail - you'll keep failing forever. |