Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Delphi] Помогите сделать проект, есть код, как сделать проект ? 
:(
    Опции темы
mob
  Дата 2.4.2009, 01:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2008

Репутация: нет
Всего: нет



Всем хай !

Может кто-то помочь в таком вопросе: у меня есть код, но я не работал в среде разработки Borland Delphi smile , поэтому не знаю как сделать проект.

Дело в том, что у меня есть код.

Помогите плз сделать проект...

Код

unit main;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, ExtCtrls, Grids;
 
const
  MAXPATH = 1000; // максимальная длина пути м/д двумя вершинами

  MAXTOWNCOUNT = 100; // максимальное количество вершин
type
  TForm1 = class(TForm)
    memRes: TMemo;
    sgWeights: TStringGrid;
    lbTowns: TListBox;
    editTownName: TEdit;
    btnAddTown: TButton;
    btnDeleteTown: TButton;
    Label1: TLabel;
    btnGo: TButton;
    Label2: TLabel;
    Label3: TLabel;
    btnClear: TButton;
    btnGenerate: TButton;
    btnSetTowns: TButton;
    lblFirstTown: TLabel;
    Label4: TLabel;
    lblMAXPATH: TLabel;
    procedure btnAddTownClick(Sender: TObject);
    procedure btnSetTownsClick(Sender: TObject);
    procedure sgWeightsSetEditText(Sender: TObject; ACol, ARow: Integer;
      const Value: String);
    procedure btnGenerateClick(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure btnDeleteTownClick(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure btnGoClick(Sender: TObject);
  private

    // матрица весов (расстояний между городами)
    Weights: array [0..MAXTOWNCOUNT-1, 0..MAXTOWNCOUNT-1] of integer;
    // количество городов

    towncount: integer;
    // массивы для расчета
    // город (вершина графа) уже обсчитан
    Ready: array [0..MAXTOWNCOUNT-1] of boolean;
    // текущий кратчайший пусть до этого города из первого

    Paths: array [0..MAXTOWNCOUNT-1] of word;
    // предпоследний узел пути из первого города до этого

    Nodes: array [0..MAXTOWNCOUNT-1] of byte;
    // индекс первого города

    first: integer;
    // очистка интерфейсной таблицы весов
    procedure ClearGrid;
    // перенести данные из TStringGrid в матрицу весов
    procedure GetWeightsMatrix;
    // инициализируем расчет

    procedure FirstCountStep;
    // запускаем расчет
    procedure GoCount;
    // результаты - в мемо
    procedure ShowResults;
    // все ли вершины обсчитаны?

    function AllAreReady: boolean;
    // получить необсчитанную вершину с наименьшим путем
    function GetMinPath: word;
  public
    { Public declarations }

  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
(*------------------------------------
Добавить город в список
------------------------------------*)

procedure TForm1.btnAddTownClick(Sender: TObject);
begin
  if editTownName.Text='' then
    MessageDlg('Ошибка: Вы не ввели название города!', mtError, [mbOK], 0)
  else begin

    lbTowns.Items.Add(editTownName.Text);
    editTownName.Text := '';
  end;

end;
 
(*------------------------------------
Заполнить шапку таблицы названиями
городов из списка
------------------------------------*)
procedure TForm1.btnSetTownsClick(Sender: TObject);
var

 i: integer;
begin
  sgWeights.ColCount := lbTowns.Items.Count+1;
  sgWeights.RowCount := lbTowns.Items.Count+1;
  for i:=0 to lbTowns.Items.Count-1 do begin

    sgWeights.Cells[i+1,0] := lbTowns.Items[i];
    sgWeights.Cells[0,i+1] := lbTowns.Items[i];
  end;

end;
 
(*------------------------------------
При изменении ячейки таблицы, вставляем
то же значение в симметричную ячейку
------------------------------------*)
procedure TForm1.sgWeightsSetEditText(Sender: TObject; ACol, ARow: Integer;
  const Value: String);

begin
  // делаем матрицу симметричной принудительно
  sgWeights.Cells[ARow,ACol] := Value;
end;

(*------------------------------------
Сгенерировать расстояния между городами
случайным образом
------------------------------------*)
procedure TForm1.btnGenerateClick(Sender: TObject);
var
  i, j: integer;
  flag: real; // существует ли путь

begin
  ClearGrid;
  for i:=1 to sgWeights.ColCount-1 do begin

    sgWeights.Cells[i,i] := '0';
    for j:=i+1 to sgWeights.RowCount-1 do begin

      flag := random;
      if (flag>0.5) then begin

        sgWeights.Cells[i,j] := IntToStr(random(MAXPATH));
        sgWeights.Cells[j,i] := sgWeights.Cells[i,j];
      end;
    end;
  end;

end;
 
(*------------------------------------
Очистить интерфейсную таблицу расстояний
между городами
------------------------------------*)
procedure TForm1.ClearGrid;
var
  i, j: integer;

begin
  for i:=1 to sgWeights.RowCount-1 do
    for j:=1 to sgWeights.ColCount-1 do

      sgWeights.Cells[i,j] := '';
end;
 
 
(*------------------------------------
Очистить список городов
------------------------------------*)
procedure TForm1.btnClearClick(Sender: TObject);

begin
  lbTowns.Items.Clear;
end;
 
(*------------------------------------
Удалить выбранный город из списка
------------------------------------*)
procedure TForm1.btnDeleteTownClick(Sender: TObject);

var
  i: integer;
begin
  i:=0;
  // не for, т.к. после удаления длина списка изменяется
  while i<lbTowns.Items.Count do begin

    if (lbTowns.Selected[i]) then
      lbTowns.Items.Delete(i);
    i := i+1;
  end;

end;
 
(*------------------------------------
Заполняем матрицу весов из интерфейсной
таблицы
------------------------------------*)
procedure TForm1.GetWeightsMatrix;
var
  i, j: integer;

begin
  for i:=0 to towncount-1 do
    Weights[i,i] := 0; // из города в сам себя

  for i:=0 to towncount-1 do
    for j:=i+1 to towncount-1 do

      if sgWeights.Cells[i+1,j+1]='' then begin

        Weights[i,j]:=MAXPATH+1; // считаем, что это бесконечность
        Weights[j,i]:=MAXPATH+1; // симметрия

      end
      else begin
        try // получаем значение
          Weights[i,j]:=StrToInt(sgWeights.Cells[i+1,j+1]);
        except

          MessageDlg('Ошибка: значение в таблице не является целым числои!',
            mtError, [mbOK], 0);
          exit;
        end;
        // неотрицательное?

        if Weights[i,j]<0 then begin
          MessageDlg('Ошибка: значение в таблице не является неотрицательным!',
            mtError, [mbOK], 0);
          exit;
        end;
        // симметричная матрица

        Weights[j,i] := Weights[i,j];
      end; // else
end;
 
(*------------------------------------
При выводе формы
------------------------------------*)
procedure TForm1.FormShow(Sender: TObject);
begin
  lblMAXPATH.Caption := IntToStr(MAXPATH);

end;
 
(*------------------------------------
Запуск расчета и вывод результатов -
сборка
------------------------------------*)
procedure TForm1.btnGoClick(Sender: TObject);
begin

  towncount := lbTowns.Items.Count;
  GetWeightsMatrix; // перебрасываем пути в матрицу
  FirstCountStep; // инициализируем расчет
  GoCount; // запускаем расчет
  ShowResults; // результаты - в мемо

end;
 
(*------------------------------------
Инициализация расчета
------------------------------------*)
procedure TForm1.FirstCountStep;
var
  i: integer;

begin
  first := -1;
  for i:=0 to towncount-1 do

    if lbTowns.Selected[i] then
      first := i;
  if (first=-1) then begin

    MessageDlg('Ошибка: вы не выбрали начальный город в списке!',
      mtError, [mbOK], 0);
    exit;
  end;
  lblFirstTown.Caption := lbTowns.Items[first];
  for i:=0 to towncount-1 do begin

    Ready[i] := false; // еще ничего не посчитано
    Nodes[i] := first; // все как будто напрямую

    Paths[i] := Weights[first,i]; // прямые пути
  end;
end;
 
(*------------------------------------
Итерационная часть расчета
(собственно, сам алгоритм)
------------------------------------*)
procedure TForm1.GoCount;
var
  k, cur: integer;
begin

  while not AllAreReady() do begin
    cur := GetMinPath;
    Ready[cur] := true;
    for k:=0 to towncount-1 do

      if ((Ready[k]=false)and(Paths[k]>(Paths[cur]+Weights[cur,k]))) then begin

        Paths[k] := Paths[cur]+Weights[cur,k];
        Nodes[k] := cur;
      end;
  end;

end;
 
(*------------------------------------
Показать результаты: последовательности
перемещения и величины кратчайших путей
------------------------------------*)
procedure TForm1.ShowResults;
var
  k, last: integer;
  str: string;
  i, j: integer;

begin
  memRes.Lines.Clear;
  for k:=0 to towncount-1 do begin

    str := lbTowns.Items[k]+' ('+IntToStr(Paths[k])+')';
    last := Nodes[k];
    while last<>first do begin

      str := lbTowns.Items[last]+' => '+str;
      last := Nodes[last];
    end;
    str := lbTowns.Items[first]+' => '+str;
    memRes.Lines.Add(str);
  end;

end;
 
(*------------------------------------
Проверка: все ли вершины графа
обсчитаны
------------------------------------*)
function TForm1.AllAreReady: boolean;
var
  i: integer;

begin
  Result := true;
  for i:=0 to towncount-1 do

    if Ready[i]=false then
      Result := false;
end;

(*------------------------------------
Получить необсчитанную вершину с
наименьшим текущим путем
------------------------------------*)
function TForm1.GetMinPath: word;
var
  i, min, imin: integer;

begin
  min := MAXPATH+1;
  imin := 0;
  for i:=0 to towncount-1 do

    if ((Ready[i]=false)and(Paths[i]<min)) then begin

      min := Paths[i];
      imin := i;
    end;
  Result := imin;
end;
 
end.


PM MAIL   Вверх
Данкинг
Дата 2.4.2009, 01:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Создать новый проект, вставить в unit1.pas твой код, а на форме разместить все те компоненты, которые в нём (коде) перечислены.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Poseidon
Дата 2.4.2009, 01:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Delphi developer
****


Профиль
Группа: Комодератор
Сообщений: 5273
Регистрация: 4.2.2005
Где: Гомель, Беларусь

Репутация: 5
Всего: 133



Это похоже на "у меня есть свой дом, помогите мне найти жилье".


--------------------
Если хочешь, что бы что-то работало - используй написанное, 
если хочешь что-то понять - пиши сам...
PM MAIL ICQ   Вверх
THandle
Дата 2.4.2009, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 
PM   Вверх
mob
  Дата 2.4.2009, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2008

Репутация: нет
Всего: нет



Все спасибо !

Создал проект. Теперь вылетает ошиПка на такой код:


Код

memRes.Lines.Add()


[Error] Unit1.pas(351): Undeclared identifier: 'memRes'


А где объявить его надо ?

Добавлено через 43 секунды
Нашел. 
PM MAIL   Вверх
mr_smit
Дата 4.4.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 254
Регистрация: 27.2.2008
Где: Самара

Репутация: нет
Всего: 4



У TMemo имя должно быть memRes.
PM MAIL   Вверх
mob
  Дата 5.4.2009, 22:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 16.11.2008

Репутация: нет
Всего: нет



Сделал все, посоздавал кнопочки и друзие элементы UI.

Скопмилил - ноль эфекта. Притом компилиться через раз.

Может кто-то глянуть в готовый проект ?

Вылетает ошибка

user posted image



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1049 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.