Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #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.

Последний раз редактировалось Brain Fucker, 01.04.2012 в 23:48.
Ответить с цитированием
  #2  
Старый 02.04.2012, 00:20
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

И Вы хотите сказать, что этот код у Вас компилировался?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #3  
Старый 02.04.2012, 00:33
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
И Вы хотите сказать, что этот код у Вас компилировался?
Он компилировался без глупостей с поиском нужной ячейки матрицы, но соответственно зависал при выполнении алгоритма.
__________________
If you're afraid to fail - you'll keep failing forever.
Ответить с цитированием
  #4  
Старый 02.04.2012, 00:36
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Не знаю, что у Вас компилировалось, но, то что находится в архиве, в принципе не может быть скомпилировано по причине массы ошибок.
Вот это никогда не пройдёт:
Код:
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  
Старый 02.04.2012, 00:39
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
По умолчанию

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

именно об этом я и говорил, именно в этом помощь мне и нужна, если удалить эту чущь - то программа компилируется =)

Всё что в этом проекте собрано я обирал сам и насколько позволяют мои навыки вникал. Хочу заметить, что не ставлю своей целью кого либо обмануть или показать себя умнее чем являюсь, совершенно согласен что я полнейший нуб в программировании и именно по этому я прошу помощи.
__________________
If you're afraid to fail - you'll keep failing forever.

Последний раз редактировалось Brain Fucker, 02.04.2012 в 00:43.
Ответить с цитированием
  #6  
Старый 02.04.2012, 00:45
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Для начала, выложите архив с рабочим (собираемым) кодом, а не эту муру. Править ваши недоделки мало кому интересно.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
  #7  
Старый 02.04.2012, 11:47
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

И что же Вы всё таки имели ввиду, когда писали TForm2.Button1Click?
Что там должно, по Вашему, делаться?
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
Brain Fucker (05.04.2012)
  #8  
Старый 03.04.2012, 21:35
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
И что же Вы всё таки имели ввиду, когда писали TForm2.Button1Click?
Что там должно, по Вашему, делаться?


Должен выполняться алгоритм рассчитывающий возможный и найкратчайший маршрут
__________________
If you're afraid to fail - you'll keep failing forever.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:13.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025