Форум по 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, 00:54
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Для начала, выложите архив с рабочим (собираемым) кодом, а не эту муру. Править ваши недоделки мало кому интересно.

Извиняюсь за неудобства.
К сожалению или к радости, но если бы моя программа была полностью рабочей я бы не стал её сюда выкладывать вовсе.
Выложил компилирующийся вариант, который зависает по вполне понятной ошибке (ищет текстовое значение в численном массиве). Надеюсь Вы сможете мне подсказать как мне реализовать поиск в массиве.

Работаю над вкладкой Graf values, вкладка Relations пока не нужна.
Вложения
Тип файла: rar Programming exam.rar (362.3 Кбайт, 2 просмотров)
__________________
If you're afraid to fail - you'll keep failing forever.

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

Смотрим ValuesMatrix:
Цитата:

10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
Ттеперь код:
Код:
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;
Читаем первую строку, она пустая!
Читаем вторую строку, а там:
Цитата:
10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000
откуда возьмутся величины для указания размерности StringGrid-а?
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Brain Fucker (05.04.2012)
  #9  
Старый 02.04.2012, 11:47
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

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

Цитата:
Сообщение от angvelem

откуда возьмутся величины для указания размерности StringGrid-а?


Честно говоря, я предполагал что
Код:
  assignfile(f, 'Valuesmatrix.txt');
  reset(f);
  readln(f, temp);  
  GrafVal.colcount := temp;
  readln(f, temp);
  GrafVal.rowcount := temp;

вот в этой части кода выставляется размерность StringGrid.
Очень надеюсь на подсказку, в чём моя ошибка.
__________________
If you're afraid to fail - you'll keep failing forever.
Ответить с цитированием
  #11  
Старый 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.
Ответить с цитированием
  #12  
Старый 03.04.2012, 21:52
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Цитата:
Сообщение от Brain Fucker
Честно говоря, я предполагал что
Код:
  assignfile(f, 'Valuesmatrix.txt');
  reset(f);
  readln(f, temp);  
  GrafVal.colcount := temp;
  readln(f, temp);
  GrafVal.rowcount := temp;

вот в этой части кода выставляется размерность StringGrid.
Очень надеюсь на подсказку, в чём моя ошибка.
Правильно надеялись, но для начала эти величины должны откуда то в этом файле взяться. То есть их туда нужно предварительно записать. Хотя бы так:
Код:
  AssignFile(F, 'Valuesmatrix.txt');
  try
    Rewrite(F);
    WriteLn(F, GrafVal.ColCount);
    WriteLn(F, GrafVal.RowCount);
    for Row := 0 to GrafVal.RowCount - 1 do
      for Col := 0 to GrafVal.ColCount - 1 do
        WriteLn(F, GrafVal.cells[Col, Row]);
  finally
    CloseFile(F);
  end;
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Brain Fucker (05.04.2012)
  #13  
Старый 03.04.2012, 22:40
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Правильно надеялись, но для начала эти величины должны откуда то в этом файле взяться. То есть их туда нужно предварительно записать. Хотя бы так:
Код:
  AssignFile(F, 'Valuesmatrix.txt');
  try
    Rewrite(F);
    WriteLn(F, GrafVal.ColCount);
    WriteLn(F, GrafVal.RowCount);
    for Row := 0 to GrafVal.RowCount - 1 do
      for Col := 0 to GrafVal.ColCount - 1 do
        WriteLn(F, GrafVal.cells[Col, Row]);
  finally
    CloseFile(F);
  end;

Спасибо, действительно глупая ошибка. Следующая, наверное, не умнее, но я не вижу её в упор.
При чтении из файла заполняет только первый ряд.
Код:
begin
  assignfile(f, 'Valuesmatrix.txt');
  reset(f);
  readln(f, temp);
  GrafVal.rowcount := temp;
  readln(f, temp);
  GrafVal.colcount := temp;
  for i := 1 to GrafVal.colcount -1 do
    for j := 1 to GrafVal.rowcount -1 do
      begin
      readln(F, tempstr);
      GrafVal.cells[i, j] := tempstr;
    end;

  closefile(f);
end;
__________________
If you're afraid to fail - you'll keep failing forever.
Ответить с цитированием
  #14  
Старый 03.04.2012, 23:00
Аватар для angvelem
angvelem angvelem вне форума
.
 
Регистрация: 18.05.2011
Адрес: Омск
Сообщения: 3,970
Версия Delphi: 3,5,7,10,12,XE2
Репутация: выкл
По умолчанию

Вы считываете в TempStr :
Код:
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 
и так целиком, не разбирая на значения, ложите в одну ячейку.
__________________
Je venus de nulle part
55.026263 с.ш., 73.397636 в.д.
Ответить с цитированием
Этот пользователь сказал Спасибо angvelem за это полезное сообщение:
Brain Fucker (05.04.2012)
  #15  
Старый 04.04.2012, 00:27
Аватар для Brain Fucker
Brain Fucker Brain Fucker вне форума
Прохожий
 
Регистрация: 16.11.2011
Сообщения: 15
Версия Delphi: 7
Репутация: 10
По умолчанию

Цитата:
Сообщение от angvelem
Вы считываете в TempStr :
Код:
 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 10000 
и так целиком, не разбирая на значения, ложите в одну ячейку.

попытался решить проблему так:
Код:
var k,s,n:TStringList;i,j:integer;
begin
s:=TStringList.Create;k:=TStringList.Create;
k.LoadFromFile('Valuesmatrix.txt');
s.Delimiter:=' ';
n.Delimiter:='#13#10';
GrafVal.Rows[i].Delimiter:=s.Delimiter;
GrafVal.RowCount:=12;
GrafVal.ColCount:=12;
for i:=1 to k.Count-1 do
for j:=1 to k.Count-1 do
 begin
 s.DelimitedText:=k[i];

  GrafVal.Rows[i].DelimitedText:=s.DelimitedText;
  GrafVal.Cols[j].DelimitedText:=n.DelimitedText;
end;
s.free;k.Free;n.Free;
end;

не проходит разделитель '#13#10', подскажите как обозначить перенос строки в таком коде или может я где то ещё напутал ?
__________________
If you're afraid to fail - you'll keep failing forever.
Ответить с цитированием
Ответ


Delphi Sources

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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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