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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.06.2007, 18:16   #1
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
По умолчанию Динамический массив.Ребята ну помогите пожалуйста

Привет всем!
Ребята помогите написать программу транспорирование, умножение матрицы ,
начальная матрица получается спомощью генератора псевдослучайного числа
потом идет транспорирование матрицы и умножение я сделал программу с использованием двумерного массива а теперь надо сделать с использованием без размерного массива т.е динамического выручите пожалуйсто очень надо срочно до завтра не успею сам разобраться помогите пожалуйста
вот код с использованием двумерного массива тут что-то просто просто время нет а экзамен надо сдавать выручите Плизззззз

Код:
var
  Form1: TForm1;
  a,b,c:array[1..10,1..10] of integer;
  num,n:Integer;
implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  s:String;
begin
  n:=StrToInt(InputBox('Ввод!','Введите размерность матрицы!','3'));
  Memo1.Clear;
  Randomize;
  for i:=1 to n do
  begin
    s:='';
    for j:=1 to n do
    Begin
    a[i,j]:=random(10)+1;
    s:=s+intTostr(a[i,j])+' ';
    end;
      memo1.Lines.Add(s);
  end;                   
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  i,j:Integer;
  s1:string;
begin
  Memo2.Clear;
  for i:=1 to n do
  begin
    s1:=' ';
    for j:=1 to n do
    begin
      b[i,j]:=a[j,i];
      s1:=s1+intTostr(b[i,j])+' ';
    end;
      memo2.Lines.Add(s1);
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 i,j,o,k:Integer;
 s1:String;
begin
  Memo3.Clear;
  for i:=1 to n do
  begin
    s1:=' ';
    for o:=1 to n do
    begin
      k:=0;
      for j:=1 to n do
      k:=k+a[i,j]*b[j,o];
      c[i,o]:=k;
      s1:=s1+intTostr(c[i,o])+' ';
    end;
    memo3.Lines.Add(s1);
  end;
end;         
end.

Последний раз редактировалось Mickle; 18.06.2007 в 19:18.
Mickle вне форума Ответить с цитированием
Старый 18.06.2007, 19:21   #2
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
По умолчанию

Ну не ужели не кто не знает помогите пожалуйста
Mickle вне форума Ответить с цитированием
Старый 18.06.2007, 19:53   #3
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Попробую, но нужно немного времени что-бы протестировать.
Jeni вне форума Ответить с цитированием
Старый 18.06.2007, 20:08   #4
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
По умолчанию

Попробуй пожалуста, а я пока накопал кое-что пока тоже почитаю и буду пробывать может разберусь зарание благодарю
Mickle вне форума Ответить с цитированием
Старый 18.06.2007, 20:31   #5
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

Что-то форум "подвис", минут 20 не открывалась ни одна страница!
По программе могу сказать следующее. В принципе, можно оставить программу "как есть", но с небольшими изменениями:
1. Объявить массивы как динамические
Код:
a, b, c: array of array of integer;
2. В первой процедуре задать размеры всех массивов после ввода n
Код:
SetLength(a, n + 1); // Размер первого массива (кол-во строк)
SetLength(b, n + 1); // Размер второго массива (кол-во строк)
SetLength(c, n + 1); // Размер третьего массива (кол-во строк)

// Задание "второго измерения"
for i := 1 to n do
  for j := 1 to n do
    begin
      SetLength(a[j], n + 1); // Размер каждого столбца
      SetLength(b[j], n + 1);
      SetLength(c[j], n + 1);
    end;
Здесь везде берется не n, а n+1, т.к. в динамических массивах нумерация идет с нуля, а в коде идет нумерация с единицы. Кроме того, я так понял, что массивы "квадратные". Если нет, то придется задавать другие размеры для массивов b и c.
Всё остальное можно использовать без изменений.
Jeni вне форума Ответить с цитированием
Старый 18.06.2007, 20:32   #6
ledyMakbet
Новичок
Джуниор
 
Регистрация: 18.06.2007
Сообщений: 1
По умолчанию

Посмотрю, есть одна задумка. Завтра вышлю (если экзамен не завтра =))
ledyMakbet вне форума Ответить с цитированием
Старый 18.06.2007, 20:50   #7
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
По умолчанию

Я прочитал коечто вот у меня получается просто матрица с случайными элементами вот код
Код:
var
  Form1: TForm1;
  a,b,c:array of array of  integer;
  n:Integer;
implementation
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  i,j:integer;
  s:String;
begin
  n:=StrToInt(InputBox('Ввод!','Введите размерность матрицы','3'));
  SetLength(a,n+1,n+1);
  Memo1.Clear;
  Randomize;
  for i:=1 to n do
  begin
    s:='';
    for j:=1 to n do
    Begin
      a[i,j]:=random(10)+1;
      s:=s+intTostr(a[i,j])+' ';
    end;
      memo1.Lines.Add(s);
  end;
end;
но почему вот эта строка SetLength(a,n+1,n+1) без n+1 не работает дальше фигня получается с транспорированием?
вот тут уже дело плохо вообще ничего не выдает вот код транспорирования и умножения
Код:
procedure TForm1.Button2Click(Sender: TObject);
var
  i,j:Integer;
  s1:string;
begin
  Memo2.Clear;
  for i:=1 to n do
  begin
    s1:=' ';
    for j:=1 to n do
    begin
      b[i,j]:=a[j,i];
      s1:=s1+intTostr(b[i,j])+' ';
    end;
      memo2.Lines.Add(s1);
  end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
 i,j,o,k:Integer;
 s1:String;
begin
  Memo3.Clear;
  for i:=1 to n do
  begin
    s1:=' ';
    for o:=1 to n do
    begin
      k:=0;
      for j:=1 to n do
      k:=k+a[i,j]*b[j,o];
      c[i,o]:=k;
      s1:=s1+intTostr(c[i,o])+' ';
    end;
    memo3.Lines.Add(s1);
  end;
end;
извеняюсь за повторение

Последний раз редактировалось Mickle; 18.06.2007 в 21:24.
Mickle вне форума Ответить с цитированием
Старый 18.06.2007, 22:12   #8
Jeni
Форумчанин
 
Регистрация: 31.05.2007
Сообщений: 486
По умолчанию

"... строка SetLength(a,n+1,n+1) без n+1 не работает"
Что значит "без n+1"?

P.S. Я чего собственно прописал "второе измерение" в циклах - просто так можно задавать массивы со строками и/или столбцами разной длины, например, создавать "треугольные" массивы.
Jeni вне форума Ответить с цитированием
Старый 19.06.2007, 06:45   #9
Mickle
Пользователь
 
Регистрация: 27.03.2007
Сообщений: 37
По умолчанию

Спасибо огромное все работает, а кто знает что за фигня в программе которую переделывал не работало а создал новый проект и все прекрасно стало работать это глюки у Delphi или что-то другое.
Mickle вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
динамический массив Dimon Паскаль, Turbo Pascal, PascalABC.NET 3 21.03.2008 18:08
Динамический массив _ares_ Паскаль, Turbo Pascal, PascalABC.NET 3 26.12.2007 23:54
динамический массив Diller Помощь студентам 48 07.10.2007 16:43
Динамический массив. Mickle Помощь студентам 9 21.06.2007 20:31
Динамический массив + Dll. LEKA Общие вопросы Delphi 7 11.05.2007 20:05