Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.01.2011, 17:39   #1
Blew
 
Аватар для Blew
 
Регистрация: 21.01.2011
Сообщений: 4
По умолчанию Delphi - Создание дополнительного модуля

Здравствуйте. Мне нужна помощь в создании дополнительного модуля unit 2.
По заданию в отдельном модуле должна вычисляться сумма элементов главной диагонали матрицы, произвольной размерности.
unit 1 я уже сделал(ну и естественно подключил unit 2 в uses):
Код:
procedure TForm1.Button1Click(Sender: TObject); //создание матрицы
begin
sum:=0;
StringGrid1.ColCount:=SpinEdit1.Value;
StringGrid1.RowCount:=SpinEdit2.Value;
Randomize;
for i:=0 to StringGrid1.ColCount-1 do
for j:=0 to StringGrid1.RowCount-1 do
begin
  StringGrid1.Cells[i,j]:=inttostr(random(101));
end;
if i=j then
Begin
  Button2.Enabled:=true;
  end
  else Button2.Enabled:=false;
End;

procedure TForm1.Button2Click(Sender: TObject); //вычисление главной диагонали матрицы
begin
end;
Не могу разобраться как это сделать. В unit 2 нельзя использовать компоненты, нужно что-то SetLenght(A,0).. Но не знаю как это сделать.

Последний раз редактировалось Stilet; 23.01.2011 в 18:19.
Blew вне форума Ответить с цитированием
Старый 21.01.2011, 17:48   #2
dosha
Форумчанин
 
Регистрация: 30.08.2010
Сообщений: 224
По умолчанию

в одном в юзес вверху , а в другом после слова implementation + во втором юните обьяви все процедуры и функции между interface и implementation
dosha вне форума Ответить с цитированием
Старый 21.01.2011, 18:16   #3
Blew
 
Аватар для Blew
 
Регистрация: 21.01.2011
Сообщений: 4
По умолчанию

Это тоже сделано, но проблема в вычислении. Компоненты не могут использоваться во 2 юните.
Задавать примерно так:
Код:
var
a:array[1..10] of sting;
Begin
SetLenght(A,3);
For i:=0 to 2 do
Но у меня не получается это сделать..

Если не подключать unit2, код Button2.Click(вычисление глав. диагонали) выглядит так:
Код:
procedure Button2Click(Sender: TObject);
begin
sum:=0;
if i=j then
Begin
  for i:=0 to StringGrid1.ColCount-1 do
  begin
  sum:=sum+StrToInt(StringGrid1.Cells[i,i]);
  Edit1.Text:=IntToStr(sum);
  end;
  end
  else Edit1.Text:=IntToStr(0);
end;

Последний раз редактировалось Stilet; 23.01.2011 в 18:19.
Blew вне форума Ответить с цитированием
Старый 21.01.2011, 18:20   #4
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
Компоненты не могут использоваться во 2 юните
Если компоненты первого модуля, то могут!!!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 21.01.2011, 18:41   #5
Ybn2
Форумчанин
 
Регистрация: 18.11.2010
Сообщений: 183
По умолчанию

Blew Вы почти правильно заметили, что в Unti2 компоненты использовать нельзя! Однако есть два варианта решения вашей проблемы:
1: Можно обратиться к компонентам, но на прямую, например:
Код:
Form1.Edit1.Text:=IntToStr(sum);
2: В модуле описать функцию, которая получает значения и возвращает сумму, например:
Код:
   Function Sum (a:Array of integer):Integer;
Begin
   // действия с массивом a
   Result:= // возвращаемый результат
end;
Ybn2 вне форума Ответить с цитированием
Старый 21.01.2011, 19:53   #6
SNUPY
Форумчанин
 
Регистрация: 15.02.2008
Сообщений: 621
По умолчанию

Листинг модуля Unit2:
Код:
unit Unit2;

interface

Uses Grids, Dialogs, SysUtils;

implementation
{******************************************************************************}
{**------ Продцедура для вычисления суммы элементов главной диагонали -------**}
{**--------------------------------------------------------------------------**}
{**  Входные параметры:                                                      **}
{**    Grid - Компонент класса TStringGrid в ячейки которого забита матрицы А**}
{**--------------------------------------------------------------------------**}
{**  Возврат ф-ии: Сумма элементов главной диагонали матрицы А               **}
{******************************************************************************}
function SumDiaganal(Grid: TStringGrid): Integer;
var
  sum: Integer;
  i, j: Integer;
begin
  sum := 0;
  with Grid do
    begin
    // получим размерность матрицы
    i := ColCount - FixedCols; // кол-во колон
    j := RowCount - FixedRows; // кол-во строк

    // проверка на квадратность
    if i=j then
    begin
      // вычисляем сумму
      for i:= 1 to j do
        sum := sum+StrToInt(Cells[i + FixedCols, i + FixedRows]);
    end
    else
    // матрица не квадратная :'-(
      MessageDlg('Для подсчета суммы нужна квадратная матрица!!! ИДИОТ!!!',
        mtError, [mbOK], 0);
  end;

  // вернем значение суммы
  Result := sum;
end;

end.
Необходимо изменить процедуру (в основном модуле) Button2Click:
Код:
procedure Button2Click(Sender: TObject);
begin
  Edit1.Text:=IntToStr(SumDiaganal(StringGrid1));
end;
Помог? Ну так нажми на весы!
SNUPY вне форума Ответить с цитированием
Старый 21.01.2011, 20:25   #7
Blew
 
Аватар для Blew
 
Регистрация: 21.01.2011
Сообщений: 4
По умолчанию

Спасибо большое)
Blew вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создание модуля Delphi стек Graff Valdemar Помощь студентам 5 23.05.2010 14:46
Процедура с тремя параметрами, которая вызывается из дополнительного модуля vedro-compota Общие вопросы Delphi 5 03.05.2010 09:47
Вызов процедуры из дополнительного модуля vedro-compota Общие вопросы Delphi 23 25.04.2010 16:09
Создание модуля Deight Общие вопросы Delphi 20 31.12.2008 15:34
Создание модуля в Си JET_FLASH Общие вопросы C/C++ 16 11.01.2008 17:12