Показать сообщение отдельно
  #1  
Старый 01.04.2012, 23:46
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
Радость Для тех у кого острый ум

Взываю к вашей помощи Боги кодирования и новички!
В общем и целом сложных вопросов у меня нет, застопорился на мелочах в программе основой которой служит алгоритм величайшего кодера Дейкстры.

Вот код:

Код:
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;
 
Это код загрузки многомерного массива из файла в объект StringGrid , который по непонятным для меня причинам вешает программу.


Код:
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 ... then ... повторяющийся 11 раз и громко смеётся поясняю - это мои безрезультатные попытки получить нужное мне значение как раз из той матрицы, которая не загружается.

Все файлы программы прикреплены.

Если кто то знает как это реализовать или же у кого то в голове есть свежие интересные идеи на этот счёт, прошу Вас подскажите.
Благодарю за внимание.
Вложения
Тип файла: rar Programming exam.rar (362.2 Кбайт, 2 просмотров)
__________________
If you're afraid to fail - you'll keep failing forever.
Ответить с цитированием