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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.06.2013, 11:07   #1
mugla
Пользователь
 
Регистрация: 28.06.2013
Сообщений: 11
Восклицание Меняем столбцы местами. Двумерка

Двумерный массив из четного числа столбцов. Поменять местами первый столбец со вторым, третий — с четвертым и т. д.
Код:
procedure TForm4.Button26Click(Sender: TObject);
var i,j:byte;
begin
randomize; //Заполняем массив случайными числами
stringgrid1.ColCount:=d;
stringgrid1.RowCount:=d;
for i:=1 to d do
for j:=1 to d do
mas3[i,j]:=-4+random(21);
for i:=0 to d-1 do
for j:=0 to d-1 do
stringgrid1.Cells[i,j]:=inttostr(mas3[j+1,i+1]);
end;
 
procedure TForm4.Button28Click(Sender: TObject);
var i,j:byte; //Меняем столбцы местами
x:integer;
begin
for j:=1 to d div 2 do
for i:=1 to d do
begin
x:=mas3[i,j];
mas3[i,j]:=mas3[i,d-j+1];
mas3[i,d-j+1]:=x;
end;
stringgrid2.ColCount:=d;
stringgrid2.RowCount:=d;
for i:=0 to d-1 do
for j:=0 to d-1 do
stringgrid2.Cells[i,j]:=inttostr(mas3[j+1,i+1]);
end;
Здесь, получается, что он меняет 1 с 4, 2 с 3. А нужно 1 со 2, 3 с 4!
mugla вне форума Ответить с цитированием
Старый 28.06.2013, 11:22   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

не проверял. писал прямо тут. проверить доверяю Вам

вариант 1.
Код:
for j:=1 to d div 2 do
for i:=1 to d do
begin
  x:=mas3[i,(j-1)*2+1]; mas3[i,(j-1)*2+1]:=mas3[i,(j-1)*2+2]; mas3[i,(j-1)*2+2]:=x;
end;
вариант 2. (я бы его рекомендовал выбрать. он, как мне кажется, проще
Код:
j := 1;
while j<d do begin
  for i:=1 to d do
  begin
     x:=mas3[i,j]; mas3[i,j]:=mas3[i,j+1]; mas3[i,j+1]:=x;
  end;
  inc(j,2)
end;
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2013, 11:29   #3
mugla
Пользователь
 
Регистрация: 28.06.2013
Сообщений: 11
По умолчанию

Спасибо тебе огромное! Очень очень огромное!
Еще немного!

Мой массив mas3:array[1..d,1..d] of integer;
где const d=4; т.е массив 4 на 4. Как сделать так, чтобы я мог сам менять это значение, например 2 или 8 или 10. Главное четное, и чтобы стрингрид соответственно менялся! Плиз!
mugla вне форума Ответить с цитированием
Старый 28.06.2013, 11:51   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

читай в справке про динамические массивы Multidimensional dynamic arrays

если вкратце, то
1) заменяете объявление массива на такое:
var
mas3 : array of array of Integer;

2)
где надо установить размерность,
пишете
SetLength( mas3, d, d);

3) не забываете исправить индексацию от нуля
(где было от for i:=1 to d должно быть for i:=0 to d-1)

вот и всё

p.s. а грид у тебя уже и так меняется в соответствии с величиной d
Serge_Bliznykov вне форума Ответить с цитированием
Старый 28.06.2013, 14:04   #5
mugla
Пользователь
 
Регистрация: 28.06.2013
Сообщений: 11
По умолчанию

что-то не получается...
mugla вне форума Ответить с цитированием
Старый 28.06.2013, 14:04   #6
mugla
Пользователь
 
Регистрация: 28.06.2013
Сообщений: 11
По умолчанию

Ошибка в строке mas3[i,j]:=-4+random(21);
mugla вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поменять местами столбцы матрицы по правилу. Leshii Общие вопросы C/C++ 4 28.04.2012 18:58
Поменять местами столбцы в массиве Naposaram Общие вопросы Delphi 5 03.04.2012 22:32
Одномерный массив. Меняем местами Incomprensible Паскаль, Turbo Pascal, PascalABC.NET 3 10.04.2009 23:44
Поменять в таблице exel столбцы местами marYna Microsoft Office Excel 2 15.01.2009 18:40
поменять местами столбцы veter_s_morya SQL, базы данных 4 29.06.2008 13:36